zoukankan      html  css  js  c++  java
  • DAY21

    一:将登录时的用户信息写入cookie

    ###############################################################

    #一、存取Cookies

    #   1、设置Cookies
    #       response.set_cookie("cookie_key","value")
    #   2、获取Cookies
    #       value = request.COOKIES["cookie_key"]
    #   3、删除Cookies
    #       response.delete_cookie("cookie_key",path="/",domain=name)
    #   4、检测Cookies
    #       if "cookie_name" is request.COOKIES :
    #   5、response.set_cookie() 传递一些可选的参数 描述
    #       参数      缺省值       描述
    #       max_age  None  cookies的持续有效时间(以秒计),如果设置为 None cookies 在浏览器关闭的时候就失效了。
    #       expires  None  cookies的过期时间,格式: "Wdy, DD-Mth-YY HH:MM:SS GMT" 如果设置这个参数,
    #                           它将覆盖 max_age 参数。
    #       path      "/"     cookie生效的路径前缀,浏览器只会把cookie回传给带有该路径的页面,这样你可以避免将
    #                           cookie传给站点中的其他的应用。
    #                           当你的应用不处于站点顶层的时候,这个参数会非常有用。
    #       domain      None    cookie生效的站点。你可用这个参数来构造一个跨站cookie。如, domain=".example.com"
    #                           所构造的cookie对下面这些站点都是可读的: www.example.com 、 www2.example.com 和
    #                           an.other.sub.domain.example.com 。
    #                           如果该参数设置为 None ,cookie只能由设置它的站点读取。
    #       secure      False  如果设置为 True ,浏览器将通过HTTPS来回传cookie。
    #二、Cookies规则
    #    1、Cookies是以字典方式存储,(Key—>Value的键值对方式存储),访问是只要访问Session的键就可以得到键对应的Value
    #       如果:value = response.set_cookie("cookie_key","value")
    #    2、存储到客户端
    #       优点:
    #           数据存在在客户端,减轻服务器端的压力,提高网站的性能。
    #       缺点:
    #           1、安全性不高:在客户端机很容易被查看或破解用户回话信息
    ##################################################################

    def login(request):
        = Member.objects.get(username=request.POST['username'])
        if m.password == request.POST['password']:
            reponse.set_cookie('name',name,3600) #将name写入浏览器cookie,失效时间为3600    
            return HttpResponse("You're logged in.")
     
        else:
            return HttpResponse("Your username and password didn't match.")
             
     
    def logout(request):
        #清理cookie
        response.delete_cookie('name')
        return HttpResponse("You're logged out.")
     

    二:将登陆时的用户信息写入session表

    ####################################################################################
    # 一、开始Sessions功能:      --正常情况下,你无需任何设置就可以使用session功能。如果你删除或修改过请检测一下配置
    #      1、编辑settings.py中 MIDDLEWARE_CLASSES 配置, 确保 'django.contrib.sessions.middleware.SessionMiddleware'存在,如果没有则添加。
    #      2、编辑settings.py中INSTALLED_APPS 配置,确保'django.contrib.sessions' (如果你是刚打开这个应用,别忘了运行 manage.py syncdb )
    #
    #二、怎么使用:
    #     1、设置Sessions值
    #           request.session['session_name'] ="admin"
    #     2、获取Sessions值
    #           session_name = request.session["session_name"]
    #     3、删除Sessions值
    #           del request.session["session_name"]
    #     4、检测是否操作session值
    #           if "session_name" is request.session :
    #三、sessions规则:
    #     1、session是以字典方式存储,(Key—>Value的键值对方式存储),访问是只要访问Session的键就可以得到键对应的Value
    #       如果:value = request.session["key_name"]
    #     2、Session字典中以下划线开头的key值是Django内部保留key值。框架只会用很少的几个下划线开头的session变量,
    #       除非你知道他们的具体含义,而且愿意跟上Django的变化,否则,最好不要用这些下划线开头的变量,它们会让D
    #       jango搅乱你的应用。
    #    3、不要用一个新对象来替换掉 request.session ,也不要存取其属性、
    #    4、Session储存在服务器端,
    #      优点:数据存储相对比较安全,数据交换方便。
    #      缺点:如果存储数据多,访问量大时,比较消耗服务器端资源,导致网站整体性能下降。
    ####################################################################################

     
    # 创建或修改 session:
    request.session[key] = value
    # 获取 session:
    request.session.get(key,default=None)
    # 删除 session
    del request.session[key] # 不存在时报错
     

    一个简化的登陆认证:

    def login(request):
        = Member.objects.get(username=request.POST['username'])
        if m.password == request.POST['password']:
            request.session['member_id'= m.id
            return HttpResponse("You're logged in.")
        else:
            return HttpResponse("Your username and password didn't match.")
             
             
    def logout(request):
        try:
            del request.session['member_id']
        except KeyError:
            pass
        return HttpResponse("You're logged out.")

    钩子


    from django import forms
    from django.core.exceptions import NON_FIELD_ERRORS, ValidationError
    class RegForm(forms.Form):

    username=forms.CharField(min_length=5,
    max_length=12,
    widget=forms.TextInput(attrs={"class":"form-control","placeholder":"username"}))


    password=forms.CharField(widget=forms.PasswordInput(attrs={"class":"form-control","placeholder":"password"}))

    repeat_password=forms.CharField(widget=forms.PasswordInput(attrs={"class":"form-control","placeholder":"password"}))

    email=forms.EmailField(widget=forms.EmailInput(attrs={"class":"form-control","placeholder":"email"}))

    valid_code=forms.CharField(widget=forms.TextInput(attrs={"class":"form-control","placeholder":"valid_code"}))


    def __init__(self,request,*args,**kwargs):
    super(RegForm,self).__init__(*args,**kwargs)
    self.request=request

    #红色部分为自定义的钩子函数 :

    # def clean_password(self): # 关于密码字段的钩子
    #
    # if len(self.cleaned_data["password"])>8:
    # return self.cleaned_data["password"] # sadfsad234532
    # else:
    # raise ValidationError("密码小于8位!")
    #
    # def clean_username(self):
    #
    # if self.cleaned_data["username"].isdigit() or self.cleaned_data["username"].isalpha():
    # raise ValidationError("用户名必须包含数字与字母!")
    # else:
    # return self.cleaned_data["username"]
    #
    #
    #
    # def clean_valid_code(self):
    # if self.cleaned_data["valid_code"].upper() ==self.request.session["valid_code"].upper():
    # return self.cleaned_data["valid_code"]
    #
    #
    # else:
    # raise ValidationError("验证码错误!")





    # def clean(self):
    # if self.cleaned_data["password"]==self.cleaned_data["repeat_password"]:
    # return self.cleaned_data
    #
    # else:
    # raise ValidationError("密码不一致")
  • 相关阅读:
    react-native window下创建Hello(解决创建一路的坑)
    vue2.0 监听滚动 锚点定位
    vue-awesome-swiper 轮播图使用
    vue和react区别
    vuex 管理状态
    vue 解决axios 跨域问题
    判断一个对象是否为空? js
    微信小程序中的自定义组件(components)
    深入理解ES6箭头函数中的this
    vue中组件的data为什么是一个函数
  • 原文地址:https://www.cnblogs.com/jnbb/p/8006308.html
Copyright © 2011-2022 走看看