django - 登录注册

自定义登录注册

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下的地址

实现效果:
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/hello_syt_2018/article/details/80200608