本章主题
关键词
用户注册
csrf验证
浅谈CSEF:https://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html
用户注册业务逻辑分析
用户注册接口设计和定义
设计接口基本思路
-
对于接口的设计,我们要根据具体的业务逻辑,设计出适合业务逻辑的接口。
-
设计接口的思路:
-
分析要实现的业务逻辑:
- 明确在这个业务中涉及到几个相关子业务;
- 将每个子业务当做一个接口来设计。
-
分析接口的功能任务,明确接口的访问方式与返回数据:
- 请求方法(如GET、POST、PUT、DELETE等);
- 请求地址;
- 请求参数(如路径参数、查询字符串、表单、JSON等);
- 响应数据(如HTML、JSON等)。
-
用户注册接口设计
请求方式
选项 | 方案 |
---|---|
请求方法 | POST |
请求地址 | /users |
请求参数:表单参数
参数名 | 类型 | 是否必传 | 说明 |
---|---|---|---|
password | string | 是 | 密码 |
password2 | string | 是 | 确认密码 |
mobile | string | 是 | 手机号 |
sms_code | string | 是 | 短信验证码 |
响应结果
响应结果 | 响应内容 |
---|---|
注册失败 | 响应错误提示 |
注册成功 | 重定向到首页 |
用户注册接口定义
@api.route("/users", methods=["POST"])
def register():
"""注册
请求的参数: 手机号、短信验证码、密码、确认密码
参数格式:json
"""
# 获取请求的json数据,返回字典
用户模型类
from datetime import datetime
from . import db
from werkzeug.security import generate_password_hash, check_password_hash
from home import constants
class BaseModel(object):
"""模型基类,为每个模型补充创建时间与更新时间"""
create_time = db.Column(db.DateTime, default=datetime.now) # 记录的创建时间
update_time = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now) # 记录的更新时间
class User(BaseModel, db.Model):
"""用户"""
__tablename__ = "h_user_profile"
id = db.Column(db.Integer, primary_key=True, autoincrement=True) # 用户编号
name = db.Column(db.String(32), unique=True, nullable=False) # 用户暱称
password_hash = db.Column(db.String(128), nullable=False) # 加密的密码
mobile = db.Column(db.String(11), unique=True, nullable=False) # 手机号
real_name = db.Column(db.String(32)) # 真实姓名
id_card = db.Column(db.String(20)) # 身份证号
avatar_url = db.Column(db.String(128)) # 用户头像路径
houses = db.relationship("House", backref="user") # 用户发布的房屋
orders = db.relationship("Order", backref="user") # 用户下的订单
# 加上property装饰器后,会把函数变为属性,属性名即为函数名
@property
def password(self):
"""读取属性的函数行为"""
# print(user.password) # 读取属性时被调用
# 函数的返回值会作为属性值
# return "xxxx"
raise AttributeError("这个属性只能设置,不能读取")
# 使用这个装饰器, 对应设置属性操作
@password.setter
def password(self, value):
"""
设置属性 user.passord = "xxxxx"
:param value: 设置属性时的数据 value就是"xxxxx", 原始的明文密码
:return:
"""
self.password_hash = generate_password_hash(value)
def check_password(self, passwd):
"""
检验密码的正确性
:param passwd: 用户登录时填写的原始密码
:return: 如果正确,返回True, 否则返回False
"""
return check_password_hash(self.password_hash, passwd)
def to_dict(self):
"""将对象转换为字典数据"""
user_dict = {
"user_id": self.id,
"name": self.name,
"mobile": self.mobile,
"avatar": constants.QINIU_URL_DOMAIN + self.avatar_url if self.avatar_url else "",
"create_time": self.create_time.strftime("%Y-%m-%d %H:%M:%S")
}
return user_dict
def auth_to_dict(self):
"""将实名信息转换为字典数据"""
auth_dict = {
"user_id": self.id,
"real_name": self.real_name,
"id_card": self.id_card
}
return auth_dict
总结小便条
本篇文章主要讲了以下几点内容:
本章回顾暂时就到这了,如果还有点晕,那就把文章里所有引用的案例代码再敲几遍吧。拜拜~
版权声明:本文为sinat_38761218原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。