python之Django的入门03------form表单和cookie、session

上一篇文章链接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;   然后看到的基本上是加密的乱码
  1. 自关联查询:

    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可以选择之前创建过的对象。这就叫具有自关联(自己关联自己)
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值