- 创建一个app (命令:python manage.py startapp login)
- 设置项目settings.py文件
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'login', #添加应用
]
#连接好数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'days_practice',
'USER':'root',
'PASSWORD':'123456',
'HOST':'localhost',
'PORT':'3306',
}
}
#加入模板Templates
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'templates')],#加入模板文件
'APP_DIRS': True,
- 配置总项目的urls.py文件
from django.conf.urls import url,include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/',include('login.urls')),#添加此项
]
- 配置login应用下的urls.py文件
from django.conf.urls import url
from login import views
urlpatterns =[
url(r'^day_logins/',views.login),
url(r'^logout/',views.logout),
url(r'index',views.index),
url(r'register',views.regist),
]
- 创建模型在login应用下的models.py文件里,然后迁移文件和创建数据库(python manage.py makemigrations)(python manage.py migrate)
from django.db import models
# Create your models here.
class user(models.Model):
u_name = models.CharField(max_length=10)#保存用户名
u_password = models.CharField(max_length=255)#保存密码
u_ticket = models.CharField(max_length=30)#保存cookie值
class Meta:
db_table='user'
- login应用中的views(视图)写相应的方法
from django.shortcuts import render,render_to_response
from django import forms
from django.http import HttpResponseRedirect,HttpResponse
from register.models import user
from django.contrib.auth.hashers import make_password,check_password
# Create your views here.
class UserForm(forms.Form):
username = forms.CharField(label='用户名',max_length=10)
password = forms.CharField(label='密码',widget=forms.PasswordInput())
#处理登录的方法
def login(request):
if request.method == 'GET':
return render(request,'login.html')
if request.method == 'POST':
data = UserForm(request.POST)
if data.is_valid():
#获取到表单提交的值
username = data.cleaned_data['username']
password = data.cleaned_data['password']
print(username,password)
#把表单中取到的值和数据库里做对比
use= user.objects.get(u_name=username)
check = check_password(password,use.u_password)
#判断对比是否成功
if use and check:
ticket ='asdsadjs'
response = HttpResponseRedirect('/login/index/')
#创建cookie
response.set_cookie('ticket',ticket,3600)
#把cookie的值保存到数据库中
use.u_ticket = ticket
use.save()
#把cookie返回到游览器中
return response
else:
return HttpResponseRedirect('/login/day_logins/')
#注册相应的方法
def register(request):
if request.method == 'GET':
return render(request,'register.html')
if request.method == 'POST':
data = UserForm(request.POST)
if data.is_valid():
username = data.cleaned_data['username']
password = data.cleaned_data['password']
#对密码进行加密处理,保存到数据中
password = make_password(password)
try:
#判断用户是否已经注册了
registjudge = user.objects.filter(u_name=username).get()
return HttpResponse('用户已经存在')
except:
#把注册的数据保存到数据库中
registadd = user.objects.create(
u_name=username,
u_password=password
)
return HttpResponseRedirect('/login/day_logins/')
def logout(request): #退出登录的方法
if request.method == 'GET':
response = HttpResponseRedirect('/login/day_logins/')
response.delete_cookie('ticket')
return response
#登录成功后进入的主页的方法
def index(request):
if request.method =='GET':
#获取到游览器中的cookie
cookies = request.COOKIES.get('ticket')
#判断cookie是否存在
if not cookies:
return render(request,'login.html')
#把cookie里的值和数据库里的相对比,对比成功进入主页,否者返回登录界面
if user.objects.filter(u_ticket=cookies).exists():
return render(request,'index.html')
else:
return render(request,'login.html')
- 对应的模板文件
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a href="/login/logout/"><span>退出</span></a>
</body>
</html>
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/login/day_logins/" method="post">
<div><span>用户名:</span><input type="text" name="username"></div>
<div><span>密码:</span><input type="password" name="password"></div>
<div><input type="submit" value="登录"></div>
</form>
</body>
</html>
register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/register/day_resters/" method="post">
<div><span>用户名:</span><input type="text" name="username"></div>
<div><span>密码:</span><input type="password" name="password"></div>
<div><input type="submit" value="注册"></div>
</form>
</body>
</html>