自定义登录注册
django自带登录注册
urls.py:
from django.conf.urls import url
from uauth import views
urlpatterns = [
url(r'^regist/', views.regist), # 注册
url(r'^login/', views.login), # 登录
url(r'^logout/', views.logout), # 退出
url(r'^dj_login/', views.djlogin), # 自带登录
url(r'^dj_regist/', views.djregist) # 自带退出
]
views.py:
import time
from django.contrib import auth
from django.contrib.auth.hashers import make_password, check_password
from django.contrib.auth.models import User
from django.http import HttpResponseRedirect, HttpResponse
from django.shortcuts import render
from django.utils.crypto import random
# from django.contrib.uauth.models import Users
def regist(request):
if request.method == 'GET':
return render(request,'day6_regist.html')
if request.method == 'POST':
# 注册
name = request.POST.get('name')
password = request.POST.get('password')
password = make_password(password) # 给密码加密
User.objects.create(u_name=name,
u_password=password)
return HttpResponseRedirect('/uauth/login/')
def login(request):
if request.method == 'GET':
return render(request, 'day6_login.html')
if request.method == 'POST':
# 如果登录成功,绑定参数到cookie中 ,set_cookie
name = request.POST.get('name')
password = request.POST.get('password')
if User.objects.filter(u_name=name).exists():
user = User.objects.get(u_name=name)
# 检查密码与用户注册的密码是否相同
if check_password(password, user.u_password):
s = 'abcdefghijklmnopqrstuvwxyz1234567890'
ticket = ''
for i in range(15):
# 获取随机的字符串
ticket += random.choice(s)
# 1970年到现在的秒数
now_time = int(time.time())
ticket = 'TK_' + ticket + str(now_time)
# 定义令牌
# ticket = 'agdoajbfjad'
# 绑定令牌到cookie
# response = HttpResponse('登录成功')
response = HttpResponseRedirect('/stu/index/')
# 把 ticket 传入 到客户端的cookie中
# max_age 存活时间
response.set_cookie('ticket', ticket, max_age=3000)
# 把ticket 存在服务端(mysql数据库中)
user.u_ticket = ticket
# 给数据库 表格传入东西东西后记得保存
user.save()
return response
else:
# return HttpResponse('用户密码错误')
return render(request, 'day6_login.html', {'password':'用户密码错误'})
else:
# return HttpResponse('用户不存在')
return render(request, 'day6_login.html', {'name':'用户不存在'})
def logout(request):
if request.method == 'GET':
response = HttpResponseRedirect('/uauth/login/')
response.delete_cookie('ticket')
return response
def djlogin(request):
if request.method == 'GET':
return render(request, 'day6_login.html')
if request.method == 'POST':
name = request.POST.get('name')
password = request.POST.get('password')
user = auth.authenticate(username=name, password=password)
if user:
auth.login(request, user)
return HttpResponseRedirect('/stu/index')
else:
return render(request, 'index.html')
def djregist(request):
if request.method == 'GET':
return render(request, 'day6_regist.html')
if request.method == 'POST':
name = request.POST.get('name')
password = request.POST.get('password')
User.objects.create_user(username=name, password=password)
return HttpResponseRedirect('/uauth/dj_login/')
def djlogout(request):
if request.method == 'GET':
# 验证请求
auth.logout(request)
return HttpResponseRedirect('/uauth/dj_login/')
templates:
看项目day51 这里是套用下载好的模板, static中放js、css、 img
模板放在templates中,要把里面的样式地址改成现在的static下的地址
实现效果: