django项目班笔记-注册功能
验证码生成源码:https://files.cnblogs.com/files/icewky/captcha.zip
一、用户模型设计
1、用户表字段分析
- 添加用户手机号字段
- 添加邮箱状态字段
2、用户模式设计
Django提供了`django.contrib.auth.models.AbstractUser`用户抽象模型类允许我们继承,扩展字段来使用Django认证系统的用户模型类。
要使用Django自带的user模型类,需要先导入`UserManager`包,创建新模型时继承它
用户模型类
from django.db import models
from django.contrib.auth.models import AbstractUser ,UserManager as _UserManager # 以防重名,映射一个新名字
# Create your models here.
class UserManager(_UserManager):
'''
重写用户管理器
'''
def create_superuser(self, username, password, email=None, **extra_fields):
return super(self,UserManager).create_superuser(username=username,password=password,email=email,**extra_fields)
class Users(AbstractUser):
'''
重写用户模型,继承AbstractUser模型类
'''
objects = UserManager()
# help_text在api接口文档中会用到
mobile = models.CharField(max_length=11, unique=True, verbose_name='手机号码', error_messages={
'unique':'此手机号已经注册' # 指定报错的中文信息
},help_text='手机号')
email_as = models.BooleanField(default=False,verbose_name='邮箱状态')
class Meta:
db_table = 'tb_user' # 指明数据库表名
verbose_name = '用户' # 在admin站点中显示的名称
verbose_name_plural = verbose_name # 显示的复数名称
def __str__(self): # 打印对象时调用
return self.username
我们自定义的用户模型类还不能直接被Django的认证系统所识别,需要在配置文件中告知Django认证系统使用我们自定义的模型类。
在配置文件中进行设置
在settings.py文件中添加如下配置:
# 思考:为什么Django默认用户模型类是User?
# 阅读源代码:'django.conf.global_settings'
# AUTH_USER_MODEL = 'auth.User'
# AUTH_USER_MODEL = '应用名.模型类名'
# AUTH_USER_MODEL 参数的设置以点.来分隔,表示应用名.模型类名。
# 自定义用户模型
AUTH_USER_MODEL = 'user.Users'
注意:Django建议我们对于AUTH_USER_MODEL参数的设置一定要在第一次数据库迁移之前就设置好,否则后续使用可能出现未知错误。
二、执行迁移
python manage.py makemigrations
python manage.py migrate
注意:如果迁移时提示找不到users,请参考:https://www.cnblogs.com/icewky/p/12364717.html
数据库

三、图形验证码
将图形验证码生成工具captcha解压出来放到utils目录下
注意:captcha工具需要安装第三包:pip install pillow
在视图文件中导入captcha工具,需要根据自己文件路径导入
from dj13.utils.captcha.captcha import captcha
编写视图:
from dj13.utils.captcha.captcha import captcha
def image_code(request):
text,image = captcha.generate_captcha()
return HttpResponse(content=image, content_type='image/jpg')
添加路由:
from . import views
# APP名字,用于解析路由地址,需在path中添加name属性
app_name = 'users'
# 路由设置
urlpatterns = [
path('image_code',views.image_code,name='image_code'),
]
访问路由查看是否正常:

四、将图形验证加入到前端文件中
新建js文件
目录:static > js > register.js
$(function () {
let $img =$('.form-item .captcha-graph-img img');
genre();
$img.click(genre);
function genre() {
image_code_uuid = generateUUID();
let imageCodeUrl = '/image_code/' + image_code_uuid + '/';
$img.attr('src',imageCodeUrl)
}
// 生成图片UUID验证码
function generateUUID() {
let d = new Date().getTime();
if (window.performance && typeof window.performance.now === "function") {
d += performance.now(); //use high-precision timer if available
}
let uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
let r = (d + Math.random() * 16) % 16 | 0;
d = Math.floor(d / 16);
return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
});
return uuid;
}
})
注册页面引入js文件:
{% block script %}
<script src="../../static/js/register.js"></script>
{% endblock %}
修改视图文件:
from django.http import HttpResponse
from dj13.utils.captcha.captcha import captcha
from django_redis import get_redis_connection
# Create your views here.
import logging
logger = logging.getLogger('django')
def image_code(request,img_id):
text,image = captcha.generate_captcha()
redis_conn = get_redis_connection('verify_code') # 连接Redis数据库
# 保存 (键 过期时间 值)
redis_conn.setex('img_{}'.format(img_id).encode('utf8'),300,text)
logger.info('图形验证码是:{}'.format(text))
return HttpResponse(content=image, content_type='image/jpg')
修改路由,接收参数
from . import views
# APP名字,用于解析路由地址,需在path中添加name属性
app_name = 'users'
# 路由设置
urlpatterns = [
path('image_code/<uuid:img_id>/',views.image_code,name='image_code'),
]
最终效果:



django项目班笔记-注册功能的更多相关文章
- django项目班笔记-模板抽取
目录 一.将前端静态文件放置到项目文件目录 二.模板设置 三.将静态文件拖放到项目对应目录 四.检查HTML文件中的应用是否自动更改了 4.1 文件引用没有改变的解决方法 4.2 设置static文件 ...
- 潭州课堂25班:Ph201805201 django 项目 第三课 码云注册,django项目 (课堂笔记)
d码云注册,登录, 创建项目: 生成秘钥 想看秘钥: 添加公钥 复制 ssh 连接 通过 git clone <ssh> 连接 在服务器上创建 python3 虚拟环境, 创建项目 p ...
- django项目一 登录注册
STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static') ] AUTH_USER_MODEL = 'cr ...
- 跟老齐学Django 项目实战笔记
创建项目 mysite 创建应用 blog mysit/settings.py配置app INSTALLED_APPS = [ 'django.contrib.admin', 'django.cont ...
- django项目后台权限管理功能。
对后台管理员进行分角色,分类别管理,每个管理员登录账号后只显示自己负责的权限范围. 创建后台管理数据库 models.py文件内 # 管理员表 class Superuser(models.Model ...
- django项目中账号注册登陆使用JWT的记录
需求分析 1. 注册用JWT做状态保持 1.1 安装jwt pip install djangorestframework-jwt 1.2 去settings里面配置jwt ...
- 潭州课堂25班:Ph201805201 django 项目 第五课 静态页面转为模板 (课堂笔记)
一.分析静态页面 1.静态vs动态 条目 静态页面 动态页面 网站内容 固定不变 经常变动 浏览器加载速度 更快(无需向服务器发起请求) 更慢 改变网站内容 很难(修改或者创建新的html页面) ...
- Django项目: 2.模板抽取
为什么要抽模板,因为这样能够复用代码,减少代码量,需要原代码时就不需要修改,也不需要添加; 如果不同,就只需要单独修改不一样的地方就行 : 多挖坑,少代码,这就是抽模板的精髓,挖坑就是({% blo ...
- 潭州课堂25班:Ph201805201 django 项目 第九课 图片验证码前台实现,判断用户是否注册功能实现 (课堂笔记)
u胎代码实现 : 针对每一个 app 写个 js 脚本, 先给 users 的 app 应用创建个 js:在指定目录下的 js 文件夹下,创建 users 文件夹,下创建 suth.js ,图片验证 ...
随机推荐
- oracle(9) 序列和约束
序列 SEQUENCE 也是数据库对象之一,作用:根据指定的规则生成一些列数字. 序列通常是为某张表的主键提供值使用. 主键:通常每张表都会有主键字段,该字段的值要求非空且唯一, 使用该字段来确定表中 ...
- EF Core开发模式之Code First
Code First顾名思义,代码为先.首先编写完相关的实体类及DbContext派生类,然后通过映射关系自动在数据库中完成数据库表的创建. 本例中创建一个班级和学生的管理,主要有班级类MyClass ...
- requests.get()///post函数///base64函数
1.requests.get() 一般的用法:r=requests.get(url) 或者是用上session: r=requests.session() r=r.get(url) get()收集的是 ...
- tp5 输入域名即访问指定页面
遇到PC官网类型的项目,经常会遇到隐藏入口文件和输入域名即可打开官网首页的需求.需要修改站点的默认加载文件和伪静态的配置才可以生效. 以下为nginx1.15版本,宝塔面板的修改方式.修改入口文件为w ...
- 安装lombok插件IDEA的插件栏加载不出来
打开 Setting-->Appearance & Behavior -->Syetem Setting -->Updates,将Use secure connection ...
- 从Evernote大批顶尖高管离职,看处于漩涡中的笔记应用未来前景
无论是巨头,还是独角兽,甚至是小而美的某些企业,在发生高管离职.裁员等情况时,总会引起业界的广泛关注.究其原因,就在于高管离职.裁员等往往意味着企业内部发生了动荡,甚至还会直接反映出所在行业的发展趋势 ...
- Cisco连接失败问题处理
连接公司的VPN时软件一直安装不上,试了几种方法,在此总结. 原文链接:http://www.itsystemadmin.com/error-27850-unable-to-manage-networ ...
- OpenMP笔记(六)
OpenMP有三种常见的加锁操作: critical是OpenMP的指令,它规定其后的代码为临界块,任何时候只允许一个线程访问: omp_set_lock是OpenMP的库函数,要跟omp_unset ...
- 项目常用JS方法封装--奋斗的IT青年(微信公众号)
...
- CodeForces 382B 数学推导
这个题目题意简单,但是TLE得哭哭的... 输入 a b w x c五个数,最终要使得c<=a, 每一秒可以进行一个操作,如果b>=x,则 b=b-x,同时 c--;如果b<x,则a ...