首页 > 其他分享 >flask搭建平台入门教程二:用户注册和登录

flask搭建平台入门教程二:用户注册和登录

时间:2022-10-16 19:11:51浏览次数:45  
标签:required return args 用户注册 flask 入门教程 parser add import

这一篇主要实现用户注册和登录

编写接口并设置URL

根目录添加api文件夹,添加auth.py注册auth蓝图为根路径

from flask import Blueprint, jsonify

authbp = Blueprint('auth',__name__,url_prefix="")

@authbp.route("/register",methods=['POST'])
def register():
    return jsonify({
            "code": 0,
            "msg": "注册成功"
        })

在app.py加入auth蓝图

......
app.register_blueprint(authbp)

新建testapi.py测试接口,也可以使用api工具进行测试

from app import app

client = app.test_client()
with app.app_context():
    r = client.post("/register")
    print(r.json)

然后编写注册逻辑,需要数据库添加对象,父类InfoCrud可以加入一些通用方法。

......
@classmethod def getall(cls, **kwargs): return cls.query.filter_by(**kwargs).all() @classmethod def getone(cls, id): return cls.query.get(id) @classmethod def add(cls, data): obj = cls(**data) db.session.add(obj) db.session.commit() return obj @classmethod def edit(cls, data): sql = update(cls).values(**data).where(cls.id == data['id']) db.session.execute(sql) db.session.commit() @classmethod def remove(cls, id): db.session.delete(cls.query.get(id)) db.session.commit()

api/auth.py编写注册代码,这里使用flask_restful校验请求字段,密码用generate_password_hash进行加密

from flask import Blueprint, jsonify
from flask_restful import reqparse, abort
from werkzeug.security import generate_password_hash

from api import succees_response, error_response
from models.user import User

authbp = Blueprint('auth',__name__,url_prefix="")

@authbp.route("/register",methods=['POST'])
def register():
    parser = reqparse.RequestParser()
    parser.add_argument("username", type=str, required=True, help="username is required")
    parser.add_argument('password', required=True, type=str, help='password is required')
    parser.add_argument("nickname", type=str, required=True, help="username is required")
    parser.add_argument('email', required=False, type=str)
    parser.add_argument('group_id', required=False, type=int)
    args = parser.parse_args()
    if User.exist(username=args['username']):
        return jsonify(code=400,msg="用户已存在")
    args.update({'password': generate_password_hash(args['password'], salt_length=8)})
    User.add(args)
    return jsonify(succees_response)

group.py编写添加分组接口

from flask import Blueprint, jsonify
from flask_restful import reqparse

from api import error_response, succees_response
from models.group import Group

groupbp = Blueprint('group',__name__,url_prefix="/group")

@groupbp.route("/add",methods=['POST'])
def add():
    parser = reqparse.RequestParser()
    parser.add_argument("name",required=True,type=str,help="name is required")
    parser.add_argument("info", required=False, type=str)
    args = parser.parse_args()
    if Group.exist(name=args['name']):
        return jsonify(code=400,msg="用户已存在")
    Group.add(args)
    return jsonify(succees_response)

app.py

......
app.register_blueprint(groupbp)

这样就可以通过接口注册用户了

编写登录接口,使用flask_jwt_extended.create_access_token创建access_token

from flask_jwt_extended import create_access_token
from werkzeug.security import generate_password_hash, check_password_hash

@authbp.route("/login",methods=['POST'])
def login():
    parser = reqparse.RequestParser()
    parser.add_argument("username", type=str, required=True, help="username is required")
    parser.add_argument('password', required=True, type=str, help='password is required')
    args = parser.parse_args()
    user = User.query.filter_by(username=args['username']).first()
    if user is None or user.delete_time is not None:
        return jsonify(code=400,msg="用户不存在")
    ispass = check_password_hash(user.password, args['password'])
    if not ispass:
        return jsonify(code=400,msg="密码错误")
    access_token = create_access_token(identity=user.id)
    return jsonify(code=0,msg="登录成功",data={
            'userid': user.id,
            'access_token': access_token,
            'nickname': user.nickname,
            'username': user.username
        })

根目录添加auth.py,编写初始化JWTManager,以及校验用户是否登录的装饰器给后续接口做权限验证

from functools import wraps
from flask import jsonify
from flask_jwt_extended import verify_jwt_in_request, JWTManager

jwt = JWTManager()

def login_required(fn):
    @wraps(fn)
    def wrapper(*args,**kwargs):
        verify_jwt_in_request()
        return fn(*args,**kwargs)
    return wrapper

@jwt.unauthorized_loader
def unauthorized_loader_callback(e):
    return jsonify(code=10000,msg="认证失败,请检查请求头或者重新登陆")

jwt初始化app

app = Flask(__name__)
...
from auth import jwt
jwt.init_app(app)

接口登录成功

这样用户的注册和登录基本实现,下一步编写登录后其它数据的增删改查,并实现登录权限校验以及为用户指定权限。

标签:required,return,args,用户注册,flask,入门教程,parser,add,import
From: https://www.cnblogs.com/zerotest/p/16796797.html

相关文章

  • flask搭建平台入门教程一:配置数据库
    flask是什么?flask可以做什么这里就不说了,百度一下即可,这篇文章主要是手把手带你使用flask搭建一个简单的注册、登陆、以及用户权限管理模块。首先需要创建一个FLASK项......
  • flask-信号
    flask信号Flask框架中的信号基于blinker,其主要就是让开发者可是在flask请求过程中定制一些用户行为。#pip3installblinker1.内置信号request_started=_signals......
  • Flask 学习-91.使用 gunicorn 部署 flask
    前言flask启动访问平常开发的时候可以用命令行flaskrun运行,正式部署到线上环境不会这样用。Gunicorn环境准备Web框架致力于如何生成HTML代码,而Web服务器用于处理和响......
  • 用flask搭建管理平台
    flask是什么?flask可以做什么这里就不说了,百度一下即可,这篇文章主要是手把手带你使用flask搭建一个简单的注册、登陆、以及用户权限管理模块。在pycharm上创建新的flask......
  • Python Flask-SocketIO没有启动成功
    背景最近想做websocket服务端,发现Flask已提供第三方库;尝试使用后,发现前端也必须使用SocketIO,不太适用,所以放弃。 问题WARNINGininit:WebSockettransportnotavai......
  • Python Flask 返回html文件
    1、在templates文件夹建立一个html文件<!DOCTYPE html><html><head>    <meta charset="UTF-8">    <title>Index</title></head><body><h2>This is i......
  • Python Flask报错:TypeError: 'NoneType' object is not subscriptable
    问题:用Flask写了一个请求,用Jmeter请求时报错;但在postman中参数发送,可以成功返回数据以及正常状态码200; 分析:request以json形式发送post请求时,需要headers 解决:he......
  • Python 第一个Flask
    安装flaskpip3installflask 导入类fromflaskimportFlask 第一个Flask实例化创建一个Flask应用,第一个参数是Flask应用的名称app=Flask(__name_......
  • Python Flask HTTP请求
    GET请求@app.route('/get',methods=["GET"])defget_():#返回字符串return'这是get请求' POST请求@app.route('/post',methods=["POST"])defpost......
  • Flask框架
    Flask框架学习01-Flask:初识02-Flask:基础03-Flask:蓝图04-Flask:local05-Flask:高级06-Flask:SQLAlchemy Flask源码解析01-Flask源码解析:简介02-Flask源码解析:应用启......