实现Django内置注册登录权限教程
实现内置注册登录权限
环境搭建
安装依赖
pip install django
创建项目配置项目配置# 应用配置
INSTALLED_APPS = [
# 后台应用
'django.contrib.admin',
# 权限应用
'django.contrib.auth',
'django.contrib.contenttypes',
# session应用,用来记录session
'django.contrib.sessions',
# message应用,用来发送消息
'django.contrib.messages',
# 静态文件应用,用来处理静态文件
'django.contrib.staticfiles',
# 入口应用
'index',
]
配置模板目录》 : 配置数据库:
# 数据库信息 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'django_shop', # 数据库名 'USER': 'root', # 用户名 'PASSWORD': 'root', # 密码 'HOST': '192.168.33.12', # 主机 'PORT': '3306', # 取消外键约束,否则多对多模型迁移报django.db.utils.IntegrityError: (1215, 'Cannot add foreign key constraint') 'OPTIONS': { "init_command": "SET foreign_key_checks = 0;", 'charset': 'utf8' }, } }
引入 MySQL 驱动:
import zdppy_mysql zdppy_mysql.install_as_MySQLdb()
执行数据库迁移:
python manage.py makemigrations python manage.py migrate
配置区域目录:
# 文件配置 STATICFILES_DIRS = [BASE_DIR / 'static'] STATIC_URL = '/static/' if not DEBUG: STATIC_ROOT = BASE_DIR / 'static' MEDIA_URL = "/media/" MEDIA_ROOT = BASE_DIR / "media"
日志配置:
# 配置日志 LOGGING = { 'version': 1, 'disable_existing_loggers': False, # 日志处理器 'handlers': { # 控制台日志处理器 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', }, }, 'loggers': { # SQL语句输出到控制台 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level': 'DEBUG', }, } }
总路由
from django.contrib import admin from django.urls import path, include, re_path from django.views.static import serve from . import settings urlpatterns = [ path('admin/', admin.site.urls), path('', include("index.urls")), # 配置媒体文件目录 re_path('^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}) ]
子路由
from django.urls import path from . import views app_name = 'index' urlpatterns = [ path('', views.index, name='index'), ]
功能视图
from django.shortcuts import render def index(request): return render(request, "index.html")
模板
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>Django权限示例</title> </head> <body> <h1>Django权限示例</h1> <h2>路由列表</h2> <ul> <li><a href="{%%20url%20'index:index'%20%}">/</a></li> </ul> </body> </html>
开始测试
在项目目录下执行以下命令❓er注册服务:U路线设计
from django.urls import path from . import views app_name = 'index' urlpatterns = [ # 用户注册 path('/register/', views.register, name='register'), ]
视图功能
from django.contrib.auth import authenticate, login from django.contrib.auth.models import User from django.shortcuts import render, redirect from django.urls import reverse def register(request): """用户注册""" # 渲染注册页面 if request.method == "GET": return render(request, 'register.html') # 执行注册功能 if request.method == "POST": # 获取用户名和密码 uname = request.POST.get("username", '') pwd = request.POST.get("password", '') email = request.POST.get("email", '') re_password = request.POST.get("re-password", '') if pwd != re_password: info = "两次密码不一致" elif User.objects.filter(username=uname): info = '用户已经存在' else: # 添加用户数据到数据库 # is_staff:是否登录后台 # is_active:是否激活 # is_superuser:是否为超级管理员 d = dict(username=uname, password=pwd, email=email, is_staff=1, is_active=1, is_superuser=1) user = User.objects.create_user(**d) info = '注册成功,请登陆' # 跳转到登陆页面 return redirect(reverse("index:login")) return render(request, 'register.html', {"info": info})
模板:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>用户注册</title> </head> <body class="hold-transition register-page"> <div class="register-box"> <div class="register-logo"> <b>用户注册</b> </div> <div class="card"> <div class="card-body register-card-body"> <form action="{% url 'index:register' %}" method="post"> {% csrf_token %} <div class="input-group mb-3"> <input type="text" class="form-control" name="username" placeholder="用户名"> </div> <div class="input-group mb-3"> <input type="email" class="form-control" name="email" placeholder="邮箱"> </div> <div class="input-group mb-3"> <input type="password" class="form-control" name="password" placeholder="密码"> </div> <div class="input-group mb-3"> <input type="password" class="form-control" name="re-password" placeholder="重复密码"> </div> <div class="row"> <div class="col-8"> <label for="agreeTerms"> {{ info }} </label> </div> <div class="col-4"> <button type="submit" class="btn btn-primary btn-block">注册</button> </div> </div> </form> </div> </div> </div> </body> </html>
测试地址:http://192.168.33.13:8000/reigister/
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。