码迷,mamicode.com
首页 > 其他好文 > 详细

django1.8forms读书笔记

时间:2016-04-27 17:07:27      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:

一、HttpRequest对象的一些属性或方法

  • request.path,The full path, not including the domain but including the leading slash,例如:"/hello/"
  • request.get_host(),The host (i.e., the “domain,” in common parlance).例如:"127.0.0.1:8000" or"www.example.com"
  • request.get_full_path(),The path, plus a query string (if available),例如:"/hello/?print=true"
  • request.is_secure(),True if the request was made via HTTPS. Otherwise, False。例如:True or False

关于请求的其他信息request.META是一个字典,包含了所有HTTP头部信息,一些常见的keys如下:

  • HTTP_REFERER – The referring URL, if any. (Note the misspelling of REFERER.)
  • HTTP_USER_AGENT – The user’s browser’s user-agent string, if any. This looks something like:"Mozilla/5.0 (X11; U; Linux i686; fr-FR; rv:1.8.1.17) Gecko/20080829 Firefox/2.0.0.17".
  • REMOTE_ADDR – The IP address of the client, e.g., "12.345.67.89". (If the request has passed through any proxies, then this might be a comma-separated list of IP addresses, e.g., "12.345.67.89,23.456.78.90".)

注意:当不知道字典中是否含有一个键时,最好用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="");
View Code

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&nbsp;Allen&nbsp;</p>
    {% endblock %}    
    </div>
</body>
</html>
View Code

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 %}    
View Code

在视图文件中定义搜索id的视图,SearchForm函数

技术分享
1 def SearchForm(request):
2     return render(request, "searchStudentInfo.html")
View Code

在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);
View Code

添加路由

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 %}
View Code

修改视图函数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);
View Code

此时可以运行一下查看结果,效果如下:

技术分享

技术分享

二、对这个表单进行改进

对网址http://127.0.0.1:8888/student/search/进行访问,有三种可能情况

  • 访问页面,此时没有‘q’参数在GET中
  • 点击提交按钮,‘q’在GET中,但是搜索框中没有搜索内容。
  • 点击提交按钮,‘q’在GET中,搜索框中有搜索内容。

对于第一种情况我们不应该显示出错误信息,第二种情况应该显示出错信息,第三种情况应当进入数据库进行查询。为了更专业一点,当没有输入数据提交时,应当返回上一个查询框,而不是返回一个字符串。

需要修改的地方有 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});
View Code

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 %}
View Code

2、

<form action="" method="get">
当 action=""表示提交表单时,将向当前的url提交。

3、

 

django1.8forms读书笔记

标签:

原文地址:http://www.cnblogs.com/zhaopengcheng/p/5439462.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!