Python 如何从页面获取路由url以在表单中实现
我对使用Python 如何从页面获取路由url以在表单中实现,python,forms,uri,pyramid,traceback,Python,Forms,Uri,Pyramid,Traceback,我对使用Pyramid构建web框架有点陌生,到目前为止,我一直做得很好。然而,我目前正在努力完成一项看似简单的任务。我有一个表单,允许用户输入信息和评级(通过POST),以便这些信息可以填充我使用SQLALCHEMY构建的数据库 该表格由4个db表格组成(例如用户信息、类别和元素评级以及反馈文本框)。我已经为这个HTML表单构建了一个view\u config,它使用了request.params['something\u to\u check']和CRUDAPI(这是对RESTful设计的补
Pyramid
构建web框架有点陌生,到目前为止,我一直做得很好。然而,我目前正在努力完成一项看似简单的任务。我有一个表单,允许用户输入信息和评级(通过POST
),以便这些信息可以填充我使用SQLALCHEMY
构建的数据库
该表格由4个db
表格组成(例如用户信息、类别和元素评级以及反馈文本框)。我已经为这个HTML
表单构建了一个view\u config
,它使用了request.params['something\u to\u check']
和CRUD
API
(这是对RESTful
设计的补充)
问题是:
1.我试图从表单所在的评估页面中获取id,并将其与表单关联(可能是一个隐藏字段,以便我可以使用request.params
并使用我的API(如下所示)
我在一个类似实例的堆栈上读了一篇文章,但是这个函数是一个包含所有表单细节的单一函数,而不是一个为匹配id而设计的函数。Pyramid上有一些好的文档,但我不确定它们是否是我在这个实例中寻找的。我将如何在我的代码/表单中实现类似的东西?另外,我是不使用flask——我使用的是JINJA2模板
表格的路线(路线实体、评估,未列出):
视图.py
@view_config(route_name='save_assessment_result', renderer='templates/assessment_form.jinja2')
def form(request):
with transaction.manager:
username = request.params['username']
firstname = request.params['firstname']
lastname = request.params['lastname']
email = request.params['email']
owner = api.create_user(username, firstname, lastname, email)
assessment_id = int(request.params['id'])
assessment_obj = api.retrieve_assessment(assessment_id)
assessment_results = api.create_assessment_results(owner, assessment_obj)
category_rating_int = int(request.params['category_rating_int'])
category = request.params['category_name']
category_rating = api.create_category_rating(category_rating_int, category, assessment_results)
element_rating_int = int(request.params['element_rating_int'])
element = request.params['element_text']
element_rating = api.create_element_rating(element_rating_int, element, assessment_results)
text = request.params['text']
comment = api.create_comment(text, element, assessment_results)
transaction.commit()
return {}
表单JINJA模板
#假设要找到评估页面id
用户名
{{forms.input('username')}
名字
{{forms.input('firstname')}
姓氏
{{forms.input('lastname')}
电子邮件
{{forms.input('email')}
#用于添加分级的模式代码。。。
如果我读对了,我会这样做:
添加路线:
config.add_route('success', '/success/{assessment_id}')
然后是一种观点:
@view_config(route_name='success', renderer='templates/assessment_form.jinja2')
def form(request, assessment_id):
with transaction.manager:
...
重新评估后的id是一个隐藏字段
获取路线:
url = request.route_url("success", assessment_id=assessment.id)
注意:您不需要使用transanction.manager
,因为您可以自动将所有HTTP请求包装到它们自己的事务中
希望这会有所帮助!从用户将要处理的页面中提取id的工作方法(通过表单)如下所示:
- 客户访问某个表单:
http://.../assessment/23.
- 服务器匹配路由并向
的/assessment/{id}
代码发送控制视图
code使用View
加载id=int(request.matchdict['id'])
并填充 返回一个assessment\u object=api.检索\u assessment(id)
,如下所示:dict
def assessment_form_view(request):
#some code
return {'assessment_id': id, 'video_url': assessment_object.video_url, ...}
Jinja通过评估表单视图
上的@view\u config(…,renderer='some\u template')
使用模板数据呈现表单
表格应显示:
<form ... action="/save_assessment_result" method="POST">
<input type="hidden" name="assessment_id" value="{{ assessment_id }}" />
...
</form>
...
客户提交此信息。服务器将
路由/save\u assessment\u result
与请求方法class='POST'
匹配,并将控制权传递给相关的查看功能def save\u assessment\u result\u view(请求):
这个查看函数(1)从请求中提取所有必要的信息。参数,(2)调用api。创建用户(…)
和api。创建评估结果(…)
,(3)返回一个HTTP重定向
到其他一些路由,/assessment
在我已经实现的基础上构建的优秀文章是(讨论
视图可调用处理的请求对象将具有
存储在名为params的对象中的窗体参数
表单值与使用其请求的其他语言中的值非常相似
对象返回表单值:firstname=request.params['firstname']
和
lastname=request.params['lastname']
和(包括在表单中找到的隐藏代码,如上所示)。您能澄清一下吗?您需要什么?句子很长,我试图解析它,但失败了:(问题:1.我需要从用户输入信息/评分的评估页面id页面请求路由uri,以便我可以轻松地将其插入API,将用户结果和评估页面合并到一个实体中;这称为评估结果,使用用户和评估,例如API.create\u assessment\u results(所有者,评估)。@Mikkoohtama我对它进行了一些清理以澄清。谢谢Mikko。关于使用事务管理器的提示将被调查。这有助于澄清一些事情!
def assessment_form_view(request):
#some code
return {'assessment_id': id, 'video_url': assessment_object.video_url, ...}
<form ... action="/save_assessment_result" method="POST">
<input type="hidden" name="assessment_id" value="{{ assessment_id }}" />
...
</form>