Django 1.11 用户注册登录(2) 用自带的auth模块

使用自带的auth app,我们不需要写models文件,添加注册登录这个功能,我们就要用到views ,url ,templates。


settings.py 设置

在app下 settings.py 下 INSTALLED_APPS 字段 添加 ‘django.contrib.auth’,

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'bootstrap_toolkit',
    'django.forms',
    'taobao',
]

在终端 运行
python manage.py makemigrations
python manage.py migrate
可以在数据库中看到自动生成表格
数据库表格

templates 模板

与前文一样 先写两个 html 页面。(无变化,与前文一样)

register

<form action="{% url 'register' %}" method="post" accept-charset="utf-8"enctype="multipart/form-data" >
   {% csrf_token %}
   <input type="text" name="username"id="username" placeholder="请输入手机号" >
   <input type="password"  name="password" id="password" placeholder="请输入6-12位密码" >
   <input type="submit" class="submit" value="立即注册">
 </form>

login

<form action="{% url 'login' %}" method="post" accept-charset="utf-8" enctype="multipart/form-data">
   {% csrf_token %}
   <input type="text" name="username" id="username" placeholder="手机号码" >
   <input type="password" name="password" id="password" placeholder="登陆密码" value="" >
   <input type="submit" value="立即登录">
 </form>

将以上表单贴入html
action=”{% url ‘login’ %}” 以及action = {% url ‘register’ %},关联的是 urls.py 文件中 url()的name属性的全局作用。


创建一个表单的样式

目的是从前端格式化读取数据
在app 下创建一个 forms.py文件

from django import forms

class UserForm(forms.Form):
    username = forms.CharField(max_length=30)
    password = forms.CharField(max_length=50)

views 视图

from django.contrib import auth
from django.contrib.auth.models import User
from django.contrib.auth import authenticate
from django.contrib.auth.decorators import login_required
# 第四个是 auth中用户权限有关的类。auth可以设置每个用户的权限。

from .forms import UserForm

#注册
@csrf_exempt
def register_view(req):
    context = {}
    if req.method == 'POST':
        form = UserForm(req.POST)
        if form.is_valid():
            #获得表单数据
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']

            # 判断用户是否存在
            user = auth.authenticate(username = username,password = password)
            if user:
                context['userExit']=True
                return render(req, 'register.html', context)


            #添加到数据库(还可以加一些字段的处理)
            user = User.objects.create_user(username=username, password=password)
            user.save()

            #添加到session
            req.session['username'] = username
            #调用auth登录
            auth.login(req, user)
            #重定向到首页
            return redirect('/')
    else:
        context = {'isLogin':False}
    #将req 、页面 、以及context{}(要传入html文件中的内容包含在字典里)返回
    return  render(req,'register.html',context)

#登陆
@csrf_exempt
def login_view(req):
    context = {}
    if req.method == 'POST':
        form = UserForm(req.POST)
        if form.is_valid():
            #获取表单用户密码
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']

            #获取的表单数据与数据库进行比较
            user = authenticate(username = username,password = password)
            if user:
                #比较成功,跳转index
                auth.login(req,user)
                req.session['username'] = username
                return  redirect(next_to)
            else:
                #比较失败,还在login
                context = {'isLogin': False,'pawd':False}
                return render(req, 'login.html', context)
    else:
        context = {'isLogin': False,'pswd':True}
    return render(req, 'login.html', context)

#登出    
def logout_view(req):
    #清理cookie里保存username
    auth.logout(req)
    return redirect('/')

urls.py

与前文一致
直接上代码,name 中对应templates 中的 表单中的action

    url(r'^login$', views.login_view,name='login'),
    url(r'^logout', views.logout_view),
    url(r'^register$', views.register_view,name='register'),
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值