zoukankan      html  css  js  c++  java
  • Django(其二)

    session

    def session_login(request):
        if request.method=='POST':
            username = request.POST.get('user')
            password = request.POST.get('pwd')
    
            user = UserInfo.objects.filter(name=username,pwd=password).first()
            if user:
                request.session['is_login']=True
                request.session['username']=user.name
    
                return HttpResponse('登录成功!')
            else:
                return redirect('/cookie/')
    
    
        return render(request,"cookie.html")
    
    
    def session_index(request):
        session_name = request.session['is_login']
    
        if session_name:
            username = request.session['username']
    
            return render(request,"c_index.html",{'username':username})
    
        return render(request,'c_index.html')
    if request.COOKIE.get("sessionid"):
    更新

    在django—session表中创建一条记录:
    session-key session-data
    ltv8zy1kh5lxj1if1fcs2pqwodumr45t 更新数据

    else:


    1 生成随机字符串 ltv8zy1kh5lxj1if1fcs2pqwodumr45t
    2 response.set_cookie("sessionid",ltv8zy1kh5lxj1if1fcs2pqwodumr45t)
    3 在django—session表中创建一条记录:
    session-key session-data
    ltv8zy1kh5lxj1if1fcs2pqwodumr45t {"is_login":True,"username":"yuan"}


    request.session.flush()
    '''
    1 randon_str=request.COOKIE.get("sessionid")
    
    2 django-session.objects.filter(session-key=randon_str).delete()
    
    3 response.delete_cookie("sessionid",randon_str)
    
    '''

    用户认证组件:

    authenticate()  

     创建用户:

    python manage.py createsuperuser

    注销:

    def logout_view(request):
      logout(request)
    API:
    from django.contrib import auth :

     1 # if 验证成功返回user对象,否则返回None
    user=auth.authenticate(username=user,password=pwd)

        2 auth.login(request,user) # request.user:当前登录对象

        3 auth.logout(request)

    from django.contrib.auth.models import User # User==auth_user

    4 request.user.is_authenticated()

    5 user = User.objects.create_user(username='',password='',email='')


    补充:
    匿名用户对象:
    匿名用户
    class models.AnonymousUser

    django.contrib.auth.models.AnonymousUser 类实现了django.contrib.auth.models.User 接口,但具有下面几个不同点:

    id 永远为None。
    username 永远为空字符串。
    get_username() 永远返回空字符串。
    is_staff 和 is_superuser 永远为False。
    is_active 永远为 False。
    groups 和 user_permissions 永远为空。
    is_anonymous() 返回True 而不是False。
    is_authenticated() 返回False 而不是True。
    set_password()、check_password()、save() 和delete() 引发 NotImplementedError。
    New in Django 1.8:
    新增 AnonymousUser.get_username() 以更好地模拟 django.contrib.auth.models.User。


    总结:


    if not: auth.login(request,user) request.user == AnonymousUser()

    else:request.user==永远等于当前登录对象
    request.user是一个全局变量

    在任何视图和模板直接使用
     

    用户认证装饰器:
    添加装饰器
    @login_required
    在登录时写入动态的登录:
    user = auth.authenticate(username=user,password=pwd)
            if user:
                auth.login(request,user)
                next_url = request.GET.get("next","/auth_index/")

    中间件
     Django的中间件:
    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]
    
    

    介于request和response中间的处理过程

    首先需要导入库 MiddlewareMixin

    再建立一个类,在一个类下新建两个常用的方法:①process_request:用作接收(可以不写return值)  ②:process_response:用作发送(必须写return值)

     
    from django.utils.deprecation import MiddlewareMixin
    
    
    class Custom_middleware(MiddlewareMixin):
        def process_request(self,request):
            print('process_request')
    
        def process_response(self, request, response):
            print("process_resoponse")
    
            return response
    
    

     

     process_view方法:

    这个方法经过request方法后,通过路由控制,再经过view方法之后,若有return则会返回,若没有则会继续往下走视图函数


     

    process_exception

    process_exception(self, request, exception)
    
    

    该方法是在视图函数里出错时会执行的方法


    socketserver
    使用此方法分三步:
    一、创建自定义类
    class socker_deom(socketserver.BaseRequestHandler):
        def handle(self):
            """
            业务逻辑
            :return:
            """
    
            while 1:
                client_data = self.request.recv(1024)
                print(client_data.decode("utf-8"))
                if client_data.decode('utf-8')=='exit':
                    print("退出!")
                    break
                print("接受数据>>>",str(client_data,"utf-8"))
                response=input('相应数据>>>')
                self.request.sendall(bytes(response,"utf-8"))
            self.request.close()
    
    

    二、实例化出一个对象

    server = socketserver.ThreadingTCPServer(('127.0.0.1',8000),socker_deom)

    三、实例forver

    server.serve_forever()


  • 相关阅读:
    6、javac命令详解
    5、main方法详解
    4、第一个JAVA程序(Hello World)
    3、eclipse 查看原始类出现The jar file rt.jar has no source attachment解决方法
    2、classpath、path、JAVA_HOME的作用
    1、配置JAVA的环境变量
    Jquery.getJSON的缓存问题的处理方法
    触发器
    JQuery 来获取数据c#中的JSON数据
    从ajax获取的数据无法通过Jquery选择器来调用事件
  • 原文地址:https://www.cnblogs.com/tyh-tesla/p/9974965.html
Copyright © 2011-2022 走看看