标签:
一、HttpRequest对象的一些属性或方法
关于请求的其他信息request.META是一个字典,包含了所有HTTP头部信息,一些常见的keys如下:
注意:当不知道字典中是否含有一个键时,最好用get方法,因为META是一个字典,获取一个不存在的键会返回一个异常。例如:
ua = request.META.get(‘HTTP_USER_AGENT‘, ‘unknown‘)
2、根据学生ID搜索学生信息的简单例子:
models是
class StudentInfo(models.Model): name = models.CharField(max_length = 50,default=""); studentID = models.CharField(max_length=12,default=""); sex = models.CharField(max_length = 5,default=""); age = models.IntegerField(default=0); address = models.TextField(default="");
template文件夹里存放template文件,searchBase.html文件如下:
<!DOCTYPE html> <html> <head> <title> {% block title %}{% endblock %} </title> </head> <body> <div> {% block search %} {% endblock %} </div> <hr/> <div> {% block footer %} <p>©2016 Allen </p> {% endblock %} </div> </body> </html>
searchStudentInfo.html文件内容如下:
1 {% extends "searchBase.html" %} 2 3 {% block title %}get student infomation{% endblock %} 4 5 {% block search %} 6 <h1 style="text-align:center;">根据ID搜索学生信息</h1> 7 <div> 8 <form action="/student/search/" method="post" style="text-align:center;"> 9 <input type="text" name="q"> 10 <input type="submit" value="搜索"> 11 </form> 12 </div> 13 {% endblock %}
在视图文件中定义搜索id的视图,SearchForm函数
1 def SearchForm(request): 2 return render(request, "searchStudentInfo.html")
在urls文件中定义路由
url(r‘^searchform/$‘, views.SearchForm),
此时还不能正常工作,因为没有写搜索的响应函数。当然可以看一下效果
接下来为其添加响应函数,views.py
1 def SearchStudentInfo(request): 2 if ‘q‘ in request.POST: 3 searchInfo = "you searched %s"%request.POST[‘q‘]; 4 else: 5 searchInfo = "you submitted an empty form" 6 return HttpResponse(searchInfo);
添加路由
url(r‘^search/$‘, views.SearchStudentInfo),
此时可以正常工作。
3、将查询结果做成模版进行显示
创建显示结果模版searchResult.html代码如下:
1 {% extends "searchBase.html"%} 2 3 {% block title %}search result{% endblock %} 4 5 {% block search %} 6 <p>You searched for: <strong>{{ query }}</strong></p> 7 {% if students %} 8 <p>Found {{students|length}} students</p> 9 <table> 10 <tr> 11 <td>姓名</td> 12 <td>学号</td> 13 <td>性别</td> 14 <td>年龄</td> 15 <td>地址</td> 16 </tr> 17 {% for student in students %} 18 <tr> 19 20 <td>{{ student.name }}</td> 21 <td>{{ student.studentID }}</td> 22 <td>{{ student.sex }}</td> 23 <td>{{ student.age }}</td> 24 <td>{{ student.address }}</td> 25 26 </tr> 27 {% endfor %} 28 </table> 29 {% else %} 30 <p>not found student where studentID = {{ query }}</p> 31 {% endif %} 32 {% endblock %}
修改视图函数views.py
1 def SearchStudentInfo(request): 2 if ‘q‘ in request.GET and request.GET[‘q‘]: 3 stu = StudentInfo.objects.filter(studentID=request.GET[‘q‘]) 4 if stu: 5 context = {‘query‘:request.GET[‘q‘],‘students‘:stu} 6 return render(request, ‘searchResult.html‘, context) 7 else: 8 return HttpResponse("not found information"); 9 10 else: 11 searchInfo = "you submitted an empty form" 12 return HttpResponse(searchInfo);
此时可以运行一下查看结果,效果如下:
二、对这个表单进行改进
对网址http://127.0.0.1:8888/student/search/进行访问,有三种可能情况
对于第一种情况我们不应该显示出错误信息,第二种情况应该显示出错信息,第三种情况应当进入数据库进行查询。为了更专业一点,当没有输入数据提交时,应当返回上一个查询框,而不是返回一个字符串。
需要修改的地方有 1、视图函数 2、在搜索模版中加入判断的变量error
views.py
1 def SearchStudentInfo(request): 2 error = False; 3 if ‘q‘ in request.GET : 4 if not request.GET[‘q‘]: 5 error=True; 6 else: 7 stu = StudentInfo.objects.filter(studentID=request.GET[‘q‘]) 8 context = {‘query‘:request.GET[‘q‘],‘students‘:stu} 9 return render(request, ‘searchResult.html‘, context) 10 11 return render(request, ‘searchStudentInfo.html‘, {‘error‘:error});
searchStudentInfo.html
1 {% extends "searchBase.html" %} 2 3 {% block title %}search student infomation{% endblock %} 4 5 {% block search %} 6 <h1 style="text-align:center;">根据ID搜索学生信息</h1> 7 <div> 8 {% if error %} 9 <p style="color: red;">Please submit a search term.</p> 10 {% endif %} 11 <form action="/student/search/" method="get" style="text-align:center;"> 12 学号:<input type="text" name="q"> 13 <input type="submit" value="搜索"> 14 </form> 15 </div> 16 {% endblock %}
2、
<form action="" method="get">
当 action=""表示提交表单时,将向当前的url提交。
3、
标签:
原文地址:http://www.cnblogs.com/zhaopengcheng/p/5439462.html