Questions是一个使用SurveyJS UI能力的表单库。
项目描述
Questions
Questions是一个Python表单库,它使用SurveyJS UI的能力。Questions背后的哲学是,现代表单渲染通常需要集成一些复杂的JavaScript小部件,那么为什么不完全跳过标记生成呢?
在Questions中,表单以Python定义,类似于其他表单框架,但前端的所有内容都由SurveyJS处理。这提供了很多好处
优雅的集成UI,具有强大的JavaScript小部件。
SurveyJS与Angular2、JQuery、KnockoutJS、React和VueJS兼容。Questions确保您为每个版本获取正确的文件。
超过20种问题类型,从简单的文本输入和下拉列表到复杂的动态面板和复选框矩阵等小部件。
多种外观和感觉选项(主题),包括Bootstrap CSS支持。
完整的客户端验证(加上服务器端检查)。
在问题声明中使用简单的文本表达式来控制根据前一个问题答案显示哪些问题。
使用类组合轻松定义复杂表单。
简单的多页表单,无需保持状态。
使用SurveyJS表单创建器直接从JSON定义创建表单。
从动态JSON导入生成Python代码。
简单应用的极简代码。如果你只需要一个或两个表单,那就足够了。
零JavaScript代码选项。如果你可以使用CDN,则无需安装或下载任何JavaScript。
支持创建测试和测验,通过定义问题的“正确”答案,并可选地设置完成的最大时间。
代码看起来如何
要了解Questions如何工作,没有比看一个简单示例更好的方法了
from questions import Form from questions import TextQuestion from questions import RadioGroupQuestion class SimpleForm(Form): name = TextQuestion() email = TextQuestion(input_type="email", required="True") favorite_number = TextQuestion(title="What is your favorite number?", input_type="number") language = RadioGroupQuestion(title="Favorite Language", choices=["Python", "Other"]) version = RadioGroupQuestion(title="Preferred Python Version", choices=["Python 2", "Python 3"], visible_if="{language} = 'Python'")
这是一个相当传统的定义表单的方法,所以这里没有惊喜,但请注意
完整的多页Flask应用程序
让我们看看如果您的应用程序需求简单,事情会多么简单。以下是一个使用流行的Flask Web框架的完整应用程序
from flask import Flask from flask import redirect from flask import request from questions import Form from questions import FormPage from questions import TextQuestion from questions import DropdownQuestion class PageOne(Form): name = TextQuestion() email = TextQuestion(input_type="email", required="True") class PageTwo(Form): country = DropdownQuestion(choices_by_url={"value_name": "name", "url": "https://restcountries.eu/rest/v2/all"}) birthdate = TextQuestion(input_type="date") class Profile(Form): page_one = FormPage(PageOne, title="Identification Information") page_two = FormPage(PageTwo, title="Additional Information") app = Flask(__name__) @app.route("/", methods=("GET",)) def form(): form = Profile() return form.render_html() @app.route("/", methods=("POST",)) def post(): form_data = request.get_json() # Here, we would save to a database or something print(form_data) return redirect("/thanks") @app.route("/thanks") def thanks(): return "Thanks for your information" if __name__ == "__main__": app.run()
默认情况下,Questions使用CDN获取JavaScript资源,这就是为什么运行上述代码所需的所有东西就是安装Flask和Questions。当然,你可以自己安装所有依赖项并配置Questions以使用你的安装,但有时这已经足够让你得到一个完整的工作应用程序。
诚然,我们的应用程序没有什么大不了的,但我们得到了一个可以在浏览器中填写和提交的工作表单。看看获取带导航按钮的多页表单有多简单。请注意
如代码所示,定义多页表单非常简单,使我们能够逻辑上分离表单页面,甚至使用它们,与其他表单独立或组合,只需额外的工作。
最后,看看DropdownQuestion中的
许可证和文档
免费软件:MIT许可证
鸣谢
这个包是用Cookiecutter和audreyr/cookiecutter-pypackage项目模板创建的。
历史
0.5.0a0 (2020-10-01)
首次发布在PyPI。
0.5.0a1 (2020-12-09)
修复了当在单个表单中使用两个或多个面板时导致Questions崩溃的错误。
添加了从JSON数据创建表单子类的新功能。
将屏幕截图添加到README页面。
更新文档。
更新依赖项到最新版本。
0.5.0a2 (2020-12-09)
修复了
0.5.0a3 (2020-12-10)
确保manifest中包含jinja模板。
0.7.0a4 (2020-12-13)
更新安装文档,以提及Python < 3.8的typing-extensions要求。
在签名板中为allow_clear设置正确的默认值。
设置类型提示,允许在可见文本属性中使用本地化数组。
修复了从具有动态面板的JSON生成类时的错误。
为主要类添加字符串表示方法。
功能:为使用from_json方法创建的类添加生成代码的console脚本。
0.7.1 (2022-09-18)
错误修复:当其他页面已定义时,不要添加默认页面。
更新js CDN和测试。
0.8.0 (2023-04-10)
错误修复:修复具有可翻译文本的选择(感谢@joan-qida)。
错误修复:修复read the docs构建。
更新SurveyJS版本。
使用当前SurveyJS支持的主题。
在测试中包含更新的Python版本。
添加国际化(i18n)文档。
各种依赖项更新。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。