大家好,我是天空之城,今天给大家带来小福利,flask创建项目步骤(2)–用户注册
用户注册
csrf验证
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