20201118-Flask-项目配置

用户注册

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容