Django(其二)

sessionhtml

 

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)

'''

 

 

用戶認證組件:python

 

authenticate()  

 建立用戶:django

python manage.py createsuperusercookie

 

註銷:session

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中間的處理過程socket

首先須要導入庫 MiddlewareMixin函數

再創建一個類,在一個類下新建兩個經常使用的方法:①process_request:用做接收(能夠不寫return值)  ②:process_response:用做發送(必須寫return值)ui

 
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)
 

該方法是在視圖函數裏出錯時會執行的方法url


socketserver
使用此方法分三步:
1、建立自定義類
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()
 

2、實例化出一個對象spa

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

 

3、實例forver

server.serve_forever()
相關文章
相關標籤/搜索