用Django中自带的User模型来实现登录和注册

        在平时的web开发中,一般都少不了登录和注册功能,这次要我们用到Django框架里面自带的User模型来实现一个简单的用户登录与注册功能.

 

        需要的环境:

  • python环境
  • Django框架        
  • pycharm IDE

        我们首先需要创建一个Django项目,直接用到django-admin命令就可。

# Testproject是项目名称
django-admin startproject Testproject

        然后在用命令创建APP

python manage.py startapp TestApp

        创建完后,首先就是配置好setting.py文件了,要配置数据库、时区、语言还有注册app。

# 在setting.py中找到此部分然后添加app名来注册app
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'TestApp',
]
# setting.py
# 改成这个是中文
LANGUAGE_CODE = 'zh-hans'
# 时区为上海
TIME_ZONE = 'Asia/Shanghai'
#setting.py
# 数据库可以使用mysql,也可以用django内置的sqlite3,这里用mysql,同时先创建好数据库
"""
如果使用mysql的话要在__init__.py文件中添加
import pymysql 
pymysql.install_as_MySQLdb()
"""


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '#你的数据库名',
        'HOST': '#连接ip',
        'USER': '#用户名',
        'PASSWORD': '#密码'
    }
}

        配置完后可以先看看效果了,用runserver命令启动Django

python manage.py runserver

        当出现这个页面就是配置完成了

         然后我们就使用迁移命令来生成用户表

python manage.py makemigrations
Python manage.py migrate

         接下来我们就可以开始写视图了,下面的视图都是类视图

from django.views.generic import View
# django自带用户类
from django.contrib.auth.models import User
# django的用户功能库
from django.contrib.auth import login, logout, authenticate
from django.contrib import messages


# 注册
class Register(View):

    def get(self, request):
        # 检测用户已登录过点击注册则跳转主页,注销才能重新注册,会保存15分钟登录状态
        if request.user.is_authenticated:
            return redirect(reverse('index'))
        return render(request, 'register.html')

    def post(self, request):
        # 注册
        username = request.POST.get('username', '')  # 用户名
        password = request.POST.get('password', '')  # 密码
        check_password = request.POST.get('check_password', '')  # 确认密码

        # 检测密码与确认密码一致
        if password != check_password:
            messages.success(request, "密码不一致")
            return redirect(reverse('register'))

        # 检测是否为空
        if username == '' or password == '' or check_password == '':
            messages.success(request, "不能为空!")
            return redirect(reverse('register'))

        # 检测当前账号是否注册过并提示用户
        exists = User.objects.filter(username=username).exists()
        if exists:
            messages.success(request, "该账号已注册!")
            return redirect(reverse('register'))
        User.objects.create_user(username=username, password=password)
        return redirect(reverse('login'))
# 登录
class Login(View):

    def get(self, request):
        # 检测用户已登录过点击注册则跳转主页,注销才能重新登录,会保存15分钟登录状态
        if request.user.is_authenticated:
            return redirect(reverse('index'))
        return render(request, 'login.html')

    def post(self, request):
        # 登录
        username = request.POST.get('username', '')
        password = request.POST.get('password', '')
        check_password = request.POST.get('check_password', '')

        # 判断当前用户是否存在,不存在则重新注册
        exists = User.objects.filter(username=username).exists()
        if not exists:
            messages.success(request, "该账号不存在,请重新注册!")
            return redirect(reverse('login'))

        # 检测是否为空
        if username == '' or password == '' or check_password == '':
            messages.success(request, "不能为空!")
            return redirect(reverse('login'))

        # 验证账号密码正确
        user = authenticate(username=username, password=password)
        if user:
            login(request, user)
            return redirect(reverse('index'))
        else:
            messages.success(request, "密码错误")
            return redirect(reverse('login'))

        然后就是路由

from .views import *
urlpatterns = [
    path('index/', Index.as_view(), name='index'),
    path('register/', Register.as_view(), name='register'),
    path('login/', Login.as_view(), name='login'),
]

        前端部分就不展示了,只要把表单里的name属性设置成跟视图里的字段对应就可以了

        最后登录注册功能就基本完成了

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值