在平时的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属性设置成跟视图里的字段对应就可以了
最后登录注册功能就基本完成了