前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flask 学习-70.Flask-RESTX 注册接口实例

Flask 学习-70.Flask-RESTX 注册接口实例

作者头像
上海-悠悠
发布2022-09-27 16:59:46
5440
发布2022-09-27 16:59:46
举报
文章被收录于专栏:从零开始学自动化测试

前言

注册接口主要是密码需要加密,用到werkzeug.security 模块的2个方法generate_password_hash, check_password_hash. 数据库操作用到Flask-SQLAlchemy ,相关的基础配置就不写了,这里主要讲注册相关的代码。

models 模型设计

设计Users 表模型

代码语言:javascript
复制
from . import db
from datetime import datetime
from werkzeug.security import generate_password_hash, check_password_hash

class Users(db.Model):
    """用户管理"""
    __tablename__ = 'user'  # 数据库表名
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(50), unique=True, nullable=False)
    password = db.Column(db.String(128), nullable=False)
    is_active = db.Column(db.Boolean, default=1)
    email = db.Column(db.String(64), nullable=True)
    create_time = db.Column(db.DateTime, default=datetime.now)
    update_time = db.Column(db.DateTime, onupdate=datetime.now, default=datetime.now)

    def hash_password(self, password):
        """密码加密"""
        self.password = generate_password_hash(password)

    def verify_password(self, password):
        """校验密码"""
        return check_password_hash(password, self.password)

    def __repr__(self):
        return f"<Users(id='{self.id}', username='{self.username}'...)>"

    def save(self):
        """保存数据"""
        db.session.add(self)
        db.session.commit()

注册视图

注册功能用到Namespace

代码语言:javascript
复制
from flask_restx import Namespace, Resource, fields, reqparse
from flask import jsonify, request
from .models import Users
from http import HTTPStatus
from werkzeug.exceptions import Conflict, NotFound
api = Namespace('api/v1', description='注册与登录')

# 校验字段
user_model = api.model('UserModel', {
    'username': fields.String(
        max_length=50, required=True, description='用户名'),
    'password': fields.String(
        min_length=6, max_length=16, required=True, description='用户登录密码'),
    'email': fields.String(max_length=64, description='邮箱')
})

@api.route('/register')
class Register(Resource):
    @api.doc(description='注册功能')
    @api.expect(user_model, validate=True)
    def post(self):
        """register user"""
        api.logger.info(f"获取请求参数: {api.payload}")
        try:
            user = Users(
                username=api.payload.get('username'),
                email=api.payload.get('email'),
            )
            # 密码加密后保存
            user.hash_password(api.payload.get('password'))
            user.save()  # 保存数据
            return {'message': 'create user success'}, HTTPStatus.CREATED
        except Exception as e:
            api.logger.error(f"保存注册用户数据报错: {e}")
            raise Conflict(f"username  {api.payload.get('username')} exists")

主要是对三个入参校验’username,password, email’,注册成功不需要对模型序列化,所以这里就不用@api.marshal_with().

测试接口

1.先测试注册成功的情况201  CREATED

数据库保存成功

2.参数不合法返回400 BAD REQUEST

3.用户已存在返回409 CONFLICT

本期上课时间:2022年9月17号 - 2022年12月17号,周六周日上午9:00-11:00

报名费:报名费3000一人(周期3个月)

联系微信/QQ:283340479

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • models 模型设计
  • 注册视图
  • 测试接口
    • 报名费:报名费3000一人(周期3个月)
      • 联系微信/QQ:283340479
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档