163. Python语言 的 Flask框架项目 之 用户注册

  • Post author:
  • Post category:python




本章主题



关键词



用户注册



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 版权协议,转载请附上原文出处链接和本声明。