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()