用户注册
csrf验证
https://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html
用户注册业务逻辑分析
用户注册接口设计和定义
设计接口基本思路
。对于接口的设计,我们要根据具体的业务逻辑,设计出适合业务逻辑的接口。
。设计接口的思路:
。分析要实现的业务逻辑:
。明确在这个业务中涉及到几个相关子业务。
。将每个子业务当做一个接口来设计。
。分析接口的功能任务,明确接口的访问方式与返回数据:
。请求方法(如GET、POST、PUT、DELETE等)。
。请求地址。
。请求参数(如路径参数、查询字符串、表单、JSON等)。
。响应数据(如HTML、JSON等)。
用户注册接口设计
请求方式
请求参数:表单参数
响应结果
用户注册接口定义
1 @api.route("/users", methods=["POST"])
2 def register():
3 """注册
4 请求的参数: 手机号、短信验证码、密码、确认密码
5 参数格式:json
6 """
7 # 获取请求的json数据,返回字典
用户模型类
1 from datetime import datetime
2 from . import db
3 from werkzeug.security import generate_password_hash, check_password_hash
4 from home import constants
5
6
7 class BaseModel(object):
8 """模型基类,为每个模型补充创建时间与更新时间"""
9
10 create_time = db.Column(db.DateTime, default=datetime.now) # 记录的创建时间
11 update_time = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now) # 记录的更新时间
12
13
14 class User(BaseModel, db.Model):
15 """用户"""
16
17 __tablename__ = "h_user_profile"
18
19 id = db.Column(db.Integer, primary_key=True, autoincrement=True) # 用户编号
20 name = db.Column(db.String(32), unique=True, nullable=False) # 用户暱称
21 password_hash = db.Column(db.String(128), nullable=False) # 加密的密码
22 mobile = db.Column(db.String(11), unique=True, nullable=False) # 手机号
23 real_name = db.Column(db.String(32)) # 真实姓名
24 id_card = db.Column(db.String(20)) # 身份证号
25 avatar_url = db.Column(db.String(128)) # 用户头像路径
26 houses = db.relationship("House", backref="user") # 用户发布的房屋
27 orders = db.relationship("Order", backref="user") # 用户下的订单
28
29 # 加上property装饰器后,会把函数变为属性,属性名即为函数名
30 @property
31 def password(self):
32 """读取属性的函数行为"""
33 # print(user.password) # 读取属性时被调用
34 # 函数的返回值会作为属性值
35 # return "xxxx"
36 raise AttributeError("这个属性只能设置,不能读取")
37
38 # 使用这个装饰器, 对应设置属性操作
39 @password.setter
40 def password(self, value):
41 """
42 设置属性 user.passord = "xxxxx"
43 :param value: 设置属性时的数据 value就是"xxxxx", 原始的明文密码
44 :return:
45 """
46 self.password_hash = generate_password_hash(value)
47
48 def check_password(self, passwd):
49 """
50 检验密码的正确性
51 :param passwd: 用户登录时填写的原始密码
52 :return: 如果正确,返回True, 否则返回False
53 """
54 return check_password_hash(self.password_hash, passwd)
55
56 def to_dict(self):
57 """将对象转换为字典数据"""
58 user_dict = {
59 "user_id": self.id,
60 "name": self.name,
61 "mobile": self.mobile,
62 "avatar": constants.QINIU_URL_DOMAIN + self.avatar_url if self.avatar_url else "",
63 "create_time": self.create_time.strftime("%Y-%m-%d %H:%M:%S")
64 }
65 return user_dict
66
67 def auth_to_dict(self):
68 """将实名信息转换为字典数据"""
69 auth_dict = {
70 "user_id": self.id,
71 "real_name": self.real_name,
72 "id_card": self.id_card
73 }
74 return auth_dict