博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
注册功能(一)
阅读量:4346 次
发布时间:2019-06-07

本文共 2831 字,大约阅读时间需要 9 分钟。

用户注册功能

注册即用户在后台数据库中增加了一条数据

一.用户模型表的设计

1.用户表的所需字段

  • 用户名

  • 密码

  • 邮箱

  • 手机号

  • 邮箱可用性

2.用户模型的设计

由于django中内置了许多模块,这也使得他开发效率极高,所以在设计模型时如果仅仅是引用django内置的user模块功能肯定不足,需要自己去拓展。

扩展user模型的两种方法

1.如果不需要改变数据库的存储内容(不修改USER模型中的字段),只是改变行为,则可以创建一个新的User代理模型。

2.如果想要存储与User相关的信息,可以使用OneToOneField到包含其信息的模型这种one-to-one模型经常被称作Profile模型,因为它可能存储站点用户的非身份验证的相关信息。例如:

from django.contrib.auth.models import User class Employee(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) department = models.CharField(max_length=100)
自定义user模型

在django中有提供一个虚拟的User模型,其中有大部分是已经写好的,所以我们仅仅只需要根据我们额外的一些字段进行继承添加即可

开启一个新的项目官方推荐使用自己定义个User模型,在自己定义的中进行扩展

from django.contrib.auth.models import AbstractUser class User(AbstractUser): """ 通过继承AbstractUser,然后再进行添加mobile email_active 字段, AbstractUser:一个虚拟的库,在创建迁移时不会将虚拟的进行迁移。 """ mobile = models.CharField('手机号',max_length=11,help_text='手机号',unique=True, error_messages={ 'unique': '此手机号已被注册'}) email_active = models.BooleanField('邮箱状态', default='False') class Meta: db_table = 'tb_user' # 指定数据库中的表名 verbose_name = '用户' # 指定admin系统中的名字 verbose_name_plural = verbose_name # 显示复数 def __str__(self): return self.username # 当使用createsupperuser时 不需要给email而是需要提交手机号 # 之后还需要去Usermanager中将必须传入的email设置默认为None REQUIRED_FIELDS = ['mobile'] objects = UserManager()

在写完之后在settings文件中进行AUTH_USER_MODEL = 'user.User'的配置

由于上面对createsuperuser进行了修改当然在相对应的管理器中也要进行修改如下:

from django.db import models from django.contrib.auth.models import AbstractUser,UserManager as Manager class UserManager(Manager): """ 自定义user manager 在使用createsupperuser时,将需要提交的email撤销掉。 """ def create_superuser(self, username, password, email=None, **extra_fields): return super().create_superuser(username=username,password=password,email=email,**extra_fields)

写好之后要在User中添加进去即

objects = UserManager()

当迁移时出现如下错误

有可能是如下问题:

1.setting文件数据库的配置数据不对

改成如上

2.db。cnf文件中user不对

 

二.需求分析

1.接口设计

对于本次业务分为多少个子业务,将每一个子业务做成一个接口(即每个子业务一个view),

分析接口的功能与任务,对每个借口的数据及请求方式与返回数据分析

  • 请求方式:get post put 等

  • 接口url的定义

  • 接口所需要的参数(路径参数,查询字符串,请求表单,JSON等)

  • 返回的数据及返回数据的格式

 

2.注册功能分析

  • 从一个网页访问注册网页发送一次请求

  • 验证码图片加载一次请求

  • 点击刷新验证码图片一次请求

  • 短信验证码一次请求

画成图如下:

 

三.注册页面的实现

1.接口设计

条目 内容
请求方法 GET
路径参数 /user/register/
参数

2.后端代码

views

class Register(View):     def get(self,request): return render(request, 'user/register.html')

urls

urlpatterns = [     path('login/', views.login,name='login'), path('register', views.Register.as_view(),name='register'), ]

3.前端代码

{% extends 'base/base.html' %} {% load static %} {% block title %}     注册 {% endblock %} {% block link %}     
{% endblock %} {% block main_start %}

转载于:https://www.cnblogs.com/chan04/p/11323144.html

你可能感兴趣的文章
Delphi错误:Stack overflow的解决方法
查看>>
取消chrome(谷歌浏览器)浏览器下最小字体限制
查看>>
模板方法模式
查看>>
什么是ECC内存?
查看>>
使用Visual Studio 2013进行UI自动化测试
查看>>
13-集体照
查看>>
读了曾国藩家书,,心态逐渐平和起来。搞技术的如果缺乏信念的指引,生活会很乏味无聊!...
查看>>
前端javascript 错误 Uncaught SyntaxError: Unexpected token ILLEGAL
查看>>
Selenium WebDriver问题--无法打开Chrome浏览器
查看>>
2017.4.18 Java的Integer与int互转
查看>>
小程序接受返回数组的坑
查看>>
echart.js的使用
查看>>
linux7.2系统中安装Nmon并使用
查看>>
HTML转换为PDF
查看>>
邮件加密和签名
查看>>
自己动手写一个单链表
查看>>
生产者与消费者(综合案例)
查看>>
集团信息化之路——关于网络电子採购系统的需求报告
查看>>
Android设计模式系列-单例模式
查看>>
hiho一下 第一百零七周 Give My Text Back(微软笔试题)
查看>>