在之前hello python的例子中:
from django.http import HttpResponse
def hello(request):
return HttpResponse("Hello python")
HttpRequest有一些参数和属性我们需要了解下,包括URL相关信息(如请求路径、主机地址、是否通过https访问)、request.META字典集合(用户ip地址、浏览器名称版本号等),
还有一个就是我们今天要了解的request.GET和request.POST类字典对象,分别对应于表单提交的GET和POST方法。
下面来看个例子:
search_form.html
<html>
<head>
<title>Search</title>
</head>
<body>
<form action="/search/" method="get">
<input type="text" name="q">
<input type="submit" value="Search">
</form>
</body>
</html>
# urls.py
urlpatterns = patterns('',
(r'^search‐form/$', views.search_form),
(r'^search/$', views.search),
在view的search方法中获取表单提交的值:
# views.py
def search(request):
if 'q' in request.GET:
message = 'You searched for: %r' % request.GET['q']
else:
message = 'You submitted an empty form.'
return HttpResponse(message)
改进表单:
1、填写错误应不做表单跳转;
2、数据合法性判断在客户端做;
针对上面可改进如下:
#view.py
def search(request):
if 'q' in request.GET:
q = request.GET['q']
if not q:
error = 'xx不能为空'
else:
books = Book.objects.filter(title__icontains=q)
return render_to_response('search_results.html',
{'books': books, 'query': q})
return render_to_response('search_form.html',
{'error': error}
#search-form.html
<html>
<head>
<title>Search</title>
<script>
function check(){
value_username=document.getElementById("id_username").value;
if(value_username.trim().length<1){
alert("用户名不能为空!");
}
}
</script>
</head>
<body>
{ if error %}
<p style="color: red;">{{error}}</p>
{% endif %}
<form action="/search/" method="get">
<input type="text" name="q">
<input type="submit" value="Search" onClick="check()">
</form>
</body>
</html>
下面看看post传值:
相应的改成
if request.method == 'POST':
if not request.POST.get('subject', ''):
errors = '数据不能为空'
以上例子都是用原生html写表单的,django因此自己封装了一套表单模型,来看看:
Django带有一个form库,称为django.forms,这个库可以处理我们本章所提到的包括HTML表单显示以及验证。
from django import forms
class ContactForm(forms.Form):
subject = forms.CharField()
email = forms.EmailField(required=False)
message = forms.CharField()
python解释器会解析为
<tr><th><label for="id_subject">Subject:</label></th><td><input type="text" name="subject" id="id_subject...
<tr><th><label for="id_email">Email:</label></th><td><input type="text" name="email" id="id_email"...
<tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message...
下面我们结合今天所讲的来做个简单的用户注册例子:
我的博客其他文章列表