在本章中,我們將看到Pyramid如何從HTML表單中讀取數(shù)據(jù)。讓我們把下面的HTML腳本保存為 myform.html。 我們將用它來獲取模板對(duì)象并渲染它。
<html>
<body>
<form method="POST" action="http://localhost:6543/students">
<p>Student Id: <input type="text" name="id"/> </p>
<p>student Name: <input type="text" name="name"/> </p>
<p>Percentage: <input type="text" name="percent"/> </p>
<p><input type="submit" value="Submit"> </p>
</body>
</html>
在Pyramid對(duì)象的配置中添加的“index”路由會(huì)映射到下面的index()函數(shù),它會(huì)渲染上面的HTML表單 ?
@view_config(route_name='index', renderer='templates/myform.html')
def index(request):
return {}
我們可以看到,用戶輸入的數(shù)據(jù)是通過POST請(qǐng)求傳遞給/students URL的。因此,我們將添加一個(gè)’students’路由來匹配/students模式,并將其與add()視圖函數(shù)關(guān)聯(lián),如下所示
@view_config(route_name='students', renderer='templates/marklist.html')
def add(request):
student={'id':request.params['id'],
'name':request.params['name'],
'percent':int(request.params['percent'])} 9. Pyramid – HTML Form Template
students.append(student)
return {'students':students}
由POST請(qǐng)求發(fā)送的數(shù)據(jù)在HTTP請(qǐng)求對(duì)象中以 request.params 對(duì)象的形式提供。它是一個(gè)由用戶輸入的HTML表單屬性及其值組成的字典。這些數(shù)據(jù)被解析并追加到字典對(duì)象的學(xué)生列表中。更新后的學(xué)生對(duì)象作為上下文數(shù)據(jù)被傳遞給marklist.html模板。
marklist.html 網(wǎng)頁(yè)模板與前面的例子中使用的相同。它顯示了一個(gè)學(xué)生數(shù)據(jù)的表格,以及計(jì)算結(jié)果列。
<html>
<body>
<table border=1>
<thead>
<tr>
<th>Student ID</th> <th>Student Name</th>
<th>percentage</th>
<th>Result</th>
</tr>
</thead>
<tbody>
{% for Student in students %}
<tr>
<td>{{ Student.id }}</td>
<td>{{ Student.name }}</td>
<td>{{ Student.percent }}</td>
<td>
{% if Student.percent>=50 %}
Pass
{% else %}
Fail
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
例子
下面給出了完整的代碼,其中包含渲染HTML表單、解析表單數(shù)據(jù)和生成顯示學(xué)生標(biāo)記表的頁(yè)面的視圖。
from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
from pyramid.view import view_config
students = [
{"id": 1, "name": "Ravi", "percent": 75},
{"id": 2, "name": "Mona", "percent": 80},
{"id": 3, "name": "Mathews", "percent": 45},
]
@view_config(route_name='index', renderer='templates/myform.html')
def index(request):
return {}
@view_config(route_name='students', renderer='templates/marklist.html')
def add(request):
student={'id':request.params['id'], 'name':request.params['name'],
'percent':int(request.params['percent'])}
students.append(student)
return {'students':students}
if __name__ == '__main__':
with Configurator() as config:
config.include('pyramid_jinja2')
config.add_jinja2_renderer(".html")
config.add_route('index', '/')
config.add_route('students','/students')
config.scan()
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 6543, app)
server.serve_forever()
輸出
要啟動(dòng)服務(wù)器,從命令行運(yùn)行上述Python代碼。在你的瀏覽器中,訪問 http://localhost:6543/, 得到如下所示的表格—-。
輸入如圖所示的樣本數(shù)據(jù)并按下提交按鈕。瀏覽器被引導(dǎo)到/students URL,這又調(diào)用了 add() 視圖。結(jié)果是一個(gè)標(biāo)記表,顯示了新輸入的新學(xué)生的數(shù)據(jù)。
更多建議: