上一篇文章链接Django02
我们接着上一篇文章的基础上,来继续了解进一步的Django框架
用pycharm打开之前创建的项目watercar
1.form表单的GET和POST:
1.1在index.html 里添上:
<form action="/login" method="GET">
<input type="text" name="user_name">
<input type="text" name="user_name">
<input type="password" name="password">
<input type="submit">
</form>
#点击提交按钮submit时
#使用get方法url中可以显示相应信息如:file:///F:/Program%20Files/eclipse/workspace/test/src/html/Html.html?name=123&pwd=123
#post方法<form action="Html.html" method=“post”> url中只有网址
#默认方法为get
1.2设置urls:
url(r'^login$', views.login),
1.3设置views里的控制函数:
def login(request):
methon_style = request.method #获取method的类型(GET/POST)
if methon_style == 'GET':
parm = request.GET #获取GET请求传输的所有键值对数据
print(parm)
name_qiemingzi = parm['user_name'] #获取的是对应键的值的最后一个数据
name_get = parm.get('user_name', 'not_found') #获取的是对应键的值的最后一个数据
name_getlist = parm.getlist('user_name') #获取的是对应键的值的列表
print(name_get)
print(name_qiemingzi)
print(name_getlist)
elif methon_style=='POST':
parm = request.POST
print(parm)
name_qiemingzi = parm['user_name']
name_get = parm.get('user_name','not_found')
name_getlist = parm.getlist('user_name')
return HttpResponse('ok')
2. cookie 和session:
2.1概念:
session和cookie都是缓存,其存在的目的都是为了减少用户request和reponse之间的时间耗损,提高用户的浏览体验。
cookies是指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。
cookie大致上分为两种,分别是会话cookie和持久化cookie。
session是存储在服务端的,获取方式:通过cookie里的session id(通过服务器生成)获取,
而session是存放在服务器的内存中的,所以session的数据不断增加会造成服务器的负担,
所以只会把很重要的信息存储在session中,而把一些次要的东西存储在客户端的cookie中。
会话cookie是存放在客户端浏览器的内存中,他的生命周期和浏览器是一致的,当浏览器关闭会话cookie也就消失了,
而持久化cookie是存放在客户端硬盘中,持久化cookie的生命周期是我们在设置cookie时候设置的那个保存时间。
2.2 创建cookie: #在cookie里添加数据,同时传一份数据在服务器的session里
def set_cookie(request):
response = HttpResponse('ok')
response.set_cookie('name','laowang') #设定cookie的键值对
return response
#urls自己设定
#在网页的检查里,network 的 all 里,刷新网页,从set_cookie 里可以看出
2.3 得到COOKIES:
def get_cookie(request):
print(request.COOKIES['name']) #request.COOKIES[]获取cookie里的暂时保存的值
return HttpResponse('ok')
#urls自己设定
#在终端里看出
2.4 得到session: #request.session.get()获取session里面保存的值
def get_session(request):
request.session.set_expiry(None) #set_expiry设置会话的自定义到期时间----------如果value设置为None则意思是session永不清除。
request.session.flush() #用flush可以把session清除掉。
print(request.session.get('name','null')) #获取session里的name的值,如果获取不到,就输出null
return HttpResponse('ok!')
#urls自己设定
#在终端的waterDB数据库里,select * from django_session \G; 然后看到的基本上是加密的乱码
-
自关联查询:
3.1 在model里定义一个自关联用的class,并生产迁移文件迁移到数据库里: class AreaInfo(models.Model): name = models.CharField(max_length=20) parent = models.ForeignKey('self',null=True,blank=True) def __str__(self): return self.name 3.2 在templates里设置: 当前所在的省:{{ obj.parent.name }} 当前的市:{{ obj.name }} 当前的区: {% for i in obj.areainfo_set.all %} {{ i.name }} {% endfor %} 3.3 设置urls查询关键字: url(r'^dizhi$',views.dizhi), 3.4 设置views里的控制函数: def dizhi(request): obj = AreaInfo.objects.get(id=2) context = {'obj':obj} return render(request,'zi_link.html',context=context) 3.5 验证自关联: 在网页admin管理里面,新建AreaInfo对象,先新建一个没有parents的对象,接下来新建一个新的对象时,他的parents可以选择之前创建过的对象。这就叫具有自关联(自己关联自己)