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

来源:互联网 发布:淘宝上有爱弹幕账号么 编辑:程序博客网 时间:2024/04/20 04:31

使用自带的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 formsclass UserForm(forms.Form):    username = forms.CharField(max_length=30)    password = forms.CharField(max_length=50)

views 视图

from django.contrib import authfrom django.contrib.auth.models import Userfrom django.contrib.auth import authenticatefrom django.contrib.auth.decorators import login_required# 第四个是 auth中用户权限有关的类。auth可以设置每个用户的权限。from .forms import UserForm#注册@csrf_exemptdef 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_exemptdef 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 0
原创粉丝点击