1
+ from datetime import datetime
1
2
from json import JSONEncoder
2
3
3
4
from django import forms
4
5
from django .http import JsonResponse
5
- from django .shortcuts import render
6
+ from django .shortcuts import render , redirect
6
7
7
8
from search .models import CarRecord
8
9
13
14
# return JsonResponse(obj, encoder=, safe=False)
14
15
# from django.core.serializers import serialize
15
16
# return HttpResponse(serialize('json', obj), content_type='application/json; charset=utf-8')
17
+ MAX_AGE = 14 * 24 * 60 * 60
16
18
17
19
18
20
class CarRecordEncoder (JSONEncoder ):
@@ -24,8 +26,22 @@ def default(self, o):
24
26
25
27
26
28
def ajax_search (request ):
29
+ current_time = datetime .now ().ctime ()
30
+ # Cookie是保存在浏览器临时文件中的用户数据(通常是识别用户身份的ID/token或者是用户的偏好设置)
31
+ # 因为每次请求服务器时在HTTP请求的请求头中都会携带本网站的Cookie数据
32
+ # 那么服务器就可以获取这些信息来识别用户身份或者了解用户的偏好 这就是所谓的用户跟踪
33
+ # 因为HTTP本身是无状态的 所以需要使用Cookie/隐藏域/URL重写这样的技术来实现用户跟踪
34
+ # 从请求中读取指定的cookie - 通过cookie的名字找到对应的值
35
+ # 如果请求中没有指定名字的cookie可以通过get方法的第二个参数设置一个默认的返回值
36
+ last_visit_time = request .COOKIES .get ('last_visit_time' )
27
37
if request .method == 'GET' :
28
- return render (request , 'search2.html' )
38
+ response = render (request , 'search2.html' ,
39
+ {'last' : last_visit_time if last_visit_time
40
+ else '你是第一次访问我们的网站' })
41
+ # 通过render渲染页面后先用set_cookie方法设置cookie后再返回HttpResponse对象
42
+ # 第一个参数是cookie的名字 第二个参数是cookie的值 第三个参数是过期时间(秒)
43
+ response .set_cookie ('last_visit_time' , current_time , max_age = MAX_AGE )
44
+ return response
29
45
else :
30
46
carno = request .POST ['carno' ]
31
47
record_list = list (CarRecord .objects .filter (carno__icontains = carno ))
@@ -58,21 +74,31 @@ def search(request):
58
74
return render (request , 'search.html' , ctx )
59
75
60
76
61
- class CarRecordForm (forms .Form ):
77
+ class CarRecordForm (forms .ModelForm ):
62
78
carno = forms .CharField (min_length = 7 , max_length = 7 , label = '车牌号' , error_messages = {'carno' : '请输入有效的车牌号' })
63
79
reason = forms .CharField (max_length = 50 , label = '违章原因' )
64
80
punish = forms .CharField (max_length = 50 , required = False , label = '处罚方式' )
65
81
82
+ """
83
+ # 执行额外的表单数据验证
84
+ def clean_carno(self):
85
+ _carno = self.cleaned_data['carno']
86
+ if not condition:
87
+ raise forms.ValidationError('...')
88
+ return _carno
89
+ """
90
+
91
+ class Meta :
92
+ model = CarRecord
93
+ fields = ('carno' , 'reason' , 'punish' )
94
+
66
95
67
96
def add (request ):
68
- errors = []
69
97
if request .method == 'GET' :
70
- f = CarRecordForm ()
98
+ f = CarRecordForm (initial = { 'reason' : '打警察' , 'punish' : '牢底坐穿' } )
71
99
else :
72
100
f = CarRecordForm (request .POST )
73
101
if f .is_valid ():
74
- CarRecord (** f .cleaned_data ).save ()
75
- f = CarRecordForm ()
76
- else :
77
- errors = f .errors .values ()
78
- return render (request , 'add.html' , {'f' : f , 'errors' : errors })
102
+ f .save ()
103
+ return redirect ('/search2' )
104
+ return render (request , 'add.html' , {'f' : f })
0 commit comments