django实现登录注册和注销功能

  • 创建一个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>

猜你喜欢

转载自blog.csdn.net/qq_40861391/article/details/80118504