Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
honey05917
Python-100-Days
提交
70b6b6e2
P
Python-100-Days
项目概览
honey05917
/
Python-100-Days
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Python-100-Days
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
70b6b6e2
编写于
5月 25, 2018
作者:
骆昊的技术专栏
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
更新了Django实例代码
上级
52252f57
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
48 addition
and
15 deletion
+48
-15
Day31-Day35/car/search/views.py
Day31-Day35/car/search/views.py
+36
-10
Day31-Day35/car/templates/add.html
Day31-Day35/car/templates/add.html
+11
-5
Day31-Day35/car/templates/search2.html
Day31-Day35/car/templates/search2.html
+1
-0
未找到文件。
Day31-Day35/car/search/views.py
浏览文件 @
70b6b6e2
from
datetime
import
datetime
from
json
import
JSONEncoder
from
json
import
JSONEncoder
from
django
import
forms
from
django
import
forms
from
django.http
import
JsonResponse
from
django.http
import
JsonResponse
from
django.shortcuts
import
render
from
django.shortcuts
import
render
,
redirect
from
search.models
import
CarRecord
from
search.models
import
CarRecord
...
@@ -13,6 +14,7 @@ from search.models import CarRecord
...
@@ -13,6 +14,7 @@ from search.models import CarRecord
# return JsonResponse(obj, encoder=, safe=False)
# return JsonResponse(obj, encoder=, safe=False)
# from django.core.serializers import serialize
# from django.core.serializers import serialize
# return HttpResponse(serialize('json', obj), content_type='application/json; charset=utf-8')
# return HttpResponse(serialize('json', obj), content_type='application/json; charset=utf-8')
MAX_AGE
=
14
*
24
*
60
*
60
class
CarRecordEncoder
(
JSONEncoder
):
class
CarRecordEncoder
(
JSONEncoder
):
...
@@ -24,8 +26,22 @@ class CarRecordEncoder(JSONEncoder):
...
@@ -24,8 +26,22 @@ class CarRecordEncoder(JSONEncoder):
def
ajax_search
(
request
):
def
ajax_search
(
request
):
current_time
=
datetime
.
now
().
ctime
()
# Cookie是保存在浏览器临时文件中的用户数据(通常是识别用户身份的ID/token或者是用户的偏好设置)
# 因为每次请求服务器时在HTTP请求的请求头中都会携带本网站的Cookie数据
# 那么服务器就可以获取这些信息来识别用户身份或者了解用户的偏好 这就是所谓的用户跟踪
# 因为HTTP本身是无状态的 所以需要使用Cookie/隐藏域/URL重写这样的技术来实现用户跟踪
# 从请求中读取指定的cookie - 通过cookie的名字找到对应的值
# 如果请求中没有指定名字的cookie可以通过get方法的第二个参数设置一个默认的返回值
last_visit_time
=
request
.
COOKIES
.
get
(
'last_visit_time'
)
if
request
.
method
==
'GET'
:
if
request
.
method
==
'GET'
:
return
render
(
request
,
'search2.html'
)
response
=
render
(
request
,
'search2.html'
,
{
'last'
:
last_visit_time
if
last_visit_time
else
'你是第一次访问我们的网站'
})
# 通过render渲染页面后先用set_cookie方法设置cookie后再返回HttpResponse对象
# 第一个参数是cookie的名字 第二个参数是cookie的值 第三个参数是过期时间(秒)
response
.
set_cookie
(
'last_visit_time'
,
current_time
,
max_age
=
MAX_AGE
)
return
response
else
:
else
:
carno
=
request
.
POST
[
'carno'
]
carno
=
request
.
POST
[
'carno'
]
record_list
=
list
(
CarRecord
.
objects
.
filter
(
carno__icontains
=
carno
))
record_list
=
list
(
CarRecord
.
objects
.
filter
(
carno__icontains
=
carno
))
...
@@ -58,21 +74,31 @@ def search(request):
...
@@ -58,21 +74,31 @@ def search(request):
return
render
(
request
,
'search.html'
,
ctx
)
return
render
(
request
,
'search.html'
,
ctx
)
class
CarRecordForm
(
forms
.
Form
):
class
CarRecordForm
(
forms
.
Model
Form
):
carno
=
forms
.
CharField
(
min_length
=
7
,
max_length
=
7
,
label
=
'车牌号'
,
error_messages
=
{
'carno'
:
'请输入有效的车牌号'
})
carno
=
forms
.
CharField
(
min_length
=
7
,
max_length
=
7
,
label
=
'车牌号'
,
error_messages
=
{
'carno'
:
'请输入有效的车牌号'
})
reason
=
forms
.
CharField
(
max_length
=
50
,
label
=
'违章原因'
)
reason
=
forms
.
CharField
(
max_length
=
50
,
label
=
'违章原因'
)
punish
=
forms
.
CharField
(
max_length
=
50
,
required
=
False
,
label
=
'处罚方式'
)
punish
=
forms
.
CharField
(
max_length
=
50
,
required
=
False
,
label
=
'处罚方式'
)
"""
# 执行额外的表单数据验证
def clean_carno(self):
_carno = self.cleaned_data['carno']
if not condition:
raise forms.ValidationError('...')
return _carno
"""
class
Meta
:
model
=
CarRecord
fields
=
(
'carno'
,
'reason'
,
'punish'
)
def
add
(
request
):
def
add
(
request
):
errors
=
[]
if
request
.
method
==
'GET'
:
if
request
.
method
==
'GET'
:
f
=
CarRecordForm
()
f
=
CarRecordForm
(
initial
=
{
'reason'
:
'打警察'
,
'punish'
:
'牢底坐穿'
}
)
else
:
else
:
f
=
CarRecordForm
(
request
.
POST
)
f
=
CarRecordForm
(
request
.
POST
)
if
f
.
is_valid
():
if
f
.
is_valid
():
CarRecord
(
**
f
.
cleaned_data
).
save
()
f
.
save
()
f
=
CarRecordForm
()
return
redirect
(
'/search2'
)
else
:
return
render
(
request
,
'add.html'
,
{
'f'
:
f
})
errors
=
f
.
errors
.
values
()
return
render
(
request
,
'add.html'
,
{
'f'
:
f
,
'errors'
:
errors
})
Day31-Day35/car/templates/add.html
浏览文件 @
70b6b6e2
...
@@ -14,14 +14,20 @@
...
@@ -14,14 +14,20 @@
<h2>
添加违章记录
</h2>
<h2>
添加违章记录
</h2>
<hr>
<hr>
<p>
<p>
{% for
err in error
s %}
{% for
hint in hint
s %}
<div
class=
"err"
>
{{
err
}}
</div>
<div
class=
"err"
>
{{
hint
}}
</div>
{% endfor %}
{% endfor %}
</p>
</p>
<form
action=
"/add"
method=
"post"
>
<form
action=
"/add"
method=
"post"
>
<table>
{% for field in f.visible_fields %}
{{ f.as_table }}
<div>
</table>
{{ field.label }}
{{ field }}
{% for error in field.errors %}
<span
class=
"err"
>
{{ error }}
</span>
{% endfor %}
</div>
{% endfor %}
{% csrf_token %}
{% csrf_token %}
<input
type=
"submit"
value=
"添加"
>
<input
type=
"submit"
value=
"添加"
>
</form>
</form>
...
...
Day31-Day35/car/templates/search2.html
浏览文件 @
70b6b6e2
...
@@ -73,6 +73,7 @@
...
@@ -73,6 +73,7 @@
</tbody>
</tbody>
</table>
</table>
<p>
{{ last }}
</p>
</div>
</div>
<script
src=
"https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"
></script>
<script
src=
"https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"
></script>
<script>
<script>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录