web服务器

利用Django自带函数实现注册登录注销

2018-09-30  本文已影响48人  GHope

事前准备

进入已经配置好的虚拟环境中,激活Django的运行环境,切换至目标目录,通过django-admin startproject xxx 建立一个django工程。进入到和manage.py同级目录下,通过Python manage.py startapp zzz项目。修改XXX目录中的配置文件setting(添加创建的项目、连接数据库、设置模板目录等),同时在工程目录下创建模板文件夹templates、静态引用static

路由设置

工程同名项目中的urls.py文件

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    # 127.0.0.1:8000/app/stu
    url(r'app/', include('app.urls', namespace='app')),
    url(r'users/', include('users.urls', namespace='users')),
]

创建的项目下创建urls.py文件

from django.conf.urls import url
from django.contrib.auth.decorators import login_required

from users import views

urlpatterns = [
    # 注册
    url(r'^register/',views.register,name='register' ),
    # 登录
    url(r'^login/',views.login,name='login' ),
    # 首页
    url(r'^index/',login_required(views.index),name='index' ),
    # 注销
    url(r'^logout/',login_required(views.logout),name='logout' ),

]

函数实现

from django.contrib import auth
from django.contrib.auth.models import User
from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse

from app.models import Student
from users.forms import UserForm, UserLoginForm


def register(request):
    if request.method == 'GET':
        return render(request, 'register.html')

    if request.method == 'POST':
        # 校验页面中传递的参数是否完整
        form = UserForm(request.POST)
        # is_valid():判断表单是否验证通过
        if form.is_valid():
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            # 创建普通用户
            User.objects.create_user(username=username, password=password)
            return HttpResponseRedirect(reverse('users:login'))

        else:
            return render(request, 'register.html', {'form': form})


def login(request):
    if request.method == 'GET':
        return render(request, 'login.html')
    if request.method == 'POST':
        # 校验用户名和密码是否填写,校验用户名是否注册
        form = UserLoginForm(request.POST)
        if form.is_valid():
            user = auth.authenticate(username=form.cleaned_data['username'],
                                     password=form.cleaned_data['password'])
            if user:
                # 用户名和密码正确
                auth.login(request, user)
                return HttpResponseRedirect(reverse('users:index'))
            else:
                # 密码不正确
                return render(request, 'login.html', {'error': '密码错误'})
        else:
            return render(request, 'login.html', {'form': form})


def index(request):
    if request.method == 'GET':
        stus = Student.objects.all()
        return render(request, 'index.html', {'students': stus})


def logout(request):
    if request.method == 'GET':
        auth.logout(request)
        return HttpResponseRedirect(reverse('users:login'))

模块文件

有模型的使用就别忘了数据迁移

class Student(models.Model):
    s_name = models.CharField(max_length=10, unique=True, verbose_name='姓名')
    s_age = models.IntegerField(default=19, verbose_name='年龄')
    s_sex = models.BooleanField(default=1, verbose_name='性别')
    create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    operate_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')

    math = models.DecimalField(max_digits=4, decimal_places=2, null=True)
    chinese = models.DecimalField(max_digits=4, decimal_places=2, null=True)
上一篇下一篇

猜你喜欢

热点阅读