基于Django登录系统
基于Django用户登录认证
使用cookie的登录认证
(1)建表: from django.db import models class UserInfo(models.Model): username=models.CharField(max_length=32) password=models.CharField(max_length=32) (2)建立url与views之间的对应关系: url: from django.conf.urls import url from app01 import views urlpatterns = [ url(r'^login_cookie/', views.login_cookie),
url(r'^index/', views.index),]
views:
def login_cookie(request):
if request.method=="POST":
user=request.POST.get("user")
pwd=request.POST.get("pwd")
user=UserInfo.objects.filter(username=user,password=pwd).first()
if user:
obj=redirect("/index/")
obj.set_cookie("is_login",True)
obj.set_cookie("username",user.username)
return obj
return render(request,"login.html")
def index(request):
if not request.COOKIES.get("is_login"):
return redirect("/login/")
name=request.COOKIES.get("user")
return render(request,"index.html",{"name":name})
(3)新建login页面和index页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/login/" method="post"> {% csrf_token %} <p>姓名:<input type="text" name="user"></p> <p>密码:<input type="password" name="pwd"></p> <input type="submit"> <a href="/reg/"><input type="button" value="注册"></a> </form> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h3>welcome {{ name }}</h3> <a href="/logout/">注销</a> <a href="/setpwd/">修改密码</a> </body> </html>
使用cookie+session的登录认证
(1)建表 from django.db import models class UserInfo(models.Model): username=models.CharField(max_length=32) password=models.CharField(max_length=32) (2)建立url与views之间的关系
url: from django.conf.urls import url from app01 import views urlpatterns = [ url(r'^login_session/', views.login_session), url(r'^index/', views.index),]
views:
def login_session(request):
if request.method=="POST":
user=request.POST.get("user")
pwd=request.POST.get("pwd")
user=UserInfo.objects.filter(username=user,password=pwd).first()
if user:
request.session["Is_login"]=True
# request.session["user"]=user.username
return redirect("/index")
return render(request,"login.html")
def index_session(request):
if not request.session.get("Is_login"):
return redirect("/login/")
'''
uuid=request.COOKIE.get("sessionID") # 2134shdc329cbk398asdbk2
django的session表中做过滤:
session_user=session.objects.filter(session-key="2134shdc329cbk398asdbk2").first()
ret=session_user.session_data.get("Is_login") # {"Is_login":True,"user":"alex"}
'''
name=request.session.get("user")
return render(request,"index.html",{"name":name})
(3)新建login页面和index页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/login/" method="post"> {% csrf_token %} <p>姓名:<input type="text" name="user"></p> <p>密码:<input type="password" name="pwd"></p> <input type="submit"> <a href="/reg/"><input type="button" value="注册"></a> </form> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h3>welcome {{ name }}</h3> <a href="/logout/">注销</a> <a href="/setpwd/">修改密码</a> </body> </html>
基于auth登录认证系统
(1)django自动建表(auth_user表) (2)url与views建立联系 url: from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^login/', views.login), #登录页面 url(r'^index/', views.index), #登录成功之后跳到的页面 url(r'^logout/', views.log_out), #登出页面 url(r'^reg/', views.reg), #注册页面 url(r'^setpwd/', views.setpwd), #修改密码页面 ] views: from django.contrib.auth.models import User from django.contrib import auth ################################## 基于auth模块与user表 def login(request): if request.method == "POST": user = request.POST.get("user") pwd = request.POST.get("pwd") user=auth.authenticate(username=user,password=pwd) if user: auth.login(request,user) # request.session["user"]=user.username return redirect("/index/") return render(request, "login.html") def index(request): user=request.user # 显示当前登录用户对象 if not user.is_authenticated(): return redirect("/login/") name=request.user.username return render(request,"index.html",{"name":name}) def log_out(request): auth.logout(request) # request.session.flush() return redirect("/login/") def reg(request): if request.method == "POST": user = request.POST.get("user") pwd = request.POST.get("pwd") user=User.objects.create_user(username=user,password=pwd) return redirect("/login/") return render(request,"reg.html") def setpwd(request): if request.method == "POST": user = request.POST.get("user") pre_pwd = request.POST.get("pre_pwd") new_pwd = request.POST.get("new_pwd") repeat_pwd = request.POST.get("repeat_pwd") user=auth.authenticate(username=user,password=pre_pwd) if user: user.set_password(new_pwd) user.save() return redirect("/login/") return render(request,"setpwd.html")
(3)新建登录页面、index页面、注册页面、修改密码页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/login/" method="post"> {% csrf_token %} <p>姓名:<input type="text" name="user"></p> <p>密码:<input type="password" name="pwd"></p> <input type="submit"> <a href="/reg/"><input type="button" value="注册"></a> </form> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h3>welcome {{ name }}</h3> <a href="/logout/">注销</a> <a href="/setpwd/">修改密码</a> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h3>注册页面</h3> <form action="/reg/" method="post"> {% csrf_token %} <p>姓名:<input type="text" name="user"></p> <p>密码:<input type="password" name="pwd"></p> <input type="submit"> </form> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h3>修改密码页面</h3> <form action="/setpwd/" method="post"> {% csrf_token %} <p>姓名:<input type="text" name="user"></p> <p>原密码:<input type="password" name="pre_pwd"></p> <p>新密码:<input type="password" name="new_pwd"></p> <p>确认密码:<input type="password" name="repeat_pwd"></p> <input type="submit"> </form> </body> </html>
说明: auth模块------------auth.user(username password email) auth模块API: 验证函数:user=auth.authenticate(username=username,password=password) if 有该用户:user就是用户对象,否则,为None 登录函数(写入session记录的方法): auth.login(request,user) # session表添加一条记录 request.session["user_id"]=user.id 注销函数(清除一条session记录) auth.logout(request) # request.session.flush() user=request.user(********):
if登录(auth.login(request,user))------>当前登录用户对象 没有登录----------->匿名对象 user对象的API: user.is_authenticated() -----if登录,返回true,否则,false 注册方法:User.objects.create_user(username=username,password=password) 修改密码: user.set_password(new_pwd) user.save()

浙公网安备 33010602011771号