flask-登录操作
from flask import Flask, session from flask_restful import Api, Resource from flask_restful.reqparse import RequestParser from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/flask' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False api = Api(app) app.secret_key = 'fdafsdafsafsafsa' db = SQLAlchemy(app) class User(db.Model): __tablename__ = 't_user' id =db.Column(db.Integer,primary_key=True) name = db.Column(db.String(64)) mobile = db.Column(db.String(64)) def to_dict(self): return { 'id':self.id, 'name':self.name, 'mobile':self.mobile, } class Login(Resource): def post(self): parser = RequestParser() parser.add_argument('mobile',required=True,location="args") parser.add_argument('code', required=True, location="args") req = parser.parse_args() if req.code !='123456': return {'msg':"code_error"} user = User.query.filter(User.mobile==req.mobile).first() if not user: user = User(name=req.mobile,mobile=req.mobile) db.session.add(user) db.session.commit() session['uer_id'] = user.id return {'msg': '登录成功'} class Info(Resource): def get(self): user_id = session.get('user_id') if not user_id: return {'message': '请先登录'}, 401 user = User.query.filter(User.id==user_id).first() return user.to_dict() api.add_resource(Login,'/login') api.add_resource(Info,'/info') if __name__ == '__main__': app.run(debug=True)
装饰器版
from flask import Flask, session, g from flask_restful import Api, Resource from flask_restful.reqparse import RequestParser from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/flask' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False api = Api(app) app.secret_key = 'fdafsdafsafsafsa' db = SQLAlchemy(app) class User(db.Model): __tablename__ = 't_user' id =db.Column(db.Integer,primary_key=True) name = db.Column(db.String(64)) mobile = db.Column(db.String(64)) def to_dict(self): return { 'id':self.id, 'name':self.name, 'mobile':self.mobile, } class Login(Resource): def post(self): parser = RequestParser() parser.add_argument('mobile',required=True,location="args") parser.add_argument('code', required=True, location="args") req = parser.parse_args() if req.code !='123456': return {'msg':"code_error"} user = User.query.filter(User.mobile==req.mobile).first() if not user: user = User(name=req.mobile,mobile=req.mobile) db.session.add(user) db.session.commit() session['user_id'] = user.id return {'msg': '登录成功'} def login_requried(func): def wrapper(*args,**kwargs): user_id = session.get('user_id') if not user_id: return {'message': '请先登录'}, 401 user = User.query.filter(User.id==user_id).first() g.user = user return func(*args,**kwargs) return wrapper class Info(Resource): method_decorators = {'get':[login_requried]} def get(self): return g.user.to_dict() api.add_resource(Login,'/login') api.add_resource(Info,'/info') if __name__ == '__main__': app.run(debug=True)
before_request和装饰器版
from flask import Flask, session, g from flask_restful import Api, Resource from flask_restful.reqparse import RequestParser from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/flask' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False api = Api(app) app.secret_key = 'fdafsdafsafsafsa' db = SQLAlchemy(app) class User(db.Model): __tablename__ = 't_user' id =db.Column(db.Integer,primary_key=True) name = db.Column(db.String(64)) mobile = db.Column(db.String(64)) def to_dict(self): return { 'id':self.id, 'name':self.name, 'mobile':self.mobile, } class Login(Resource): def post(self): parser = RequestParser() parser.add_argument('mobile',required=True,location="args") parser.add_argument('code', required=True, location="args") req = parser.parse_args() if req.code !='123456': return {'msg':"code_error"} user = User.query.filter(User.mobile==req.mobile).first() if not user: user = User(name=req.mobile,mobile=req.mobile) db.session.add(user) db.session.commit() session['user_id'] = user.id return {'msg': '登录成功'} @app.before_request def before_request(): user_id = session.get('user_id') user = User.query.filter(User.id == user_id).first() g.user =user def login_requried(func): def wrapper(*args,**kwargs): if not g.user: return {'message': '请先登录'}, 401 return func(*args,**kwargs) return wrapper class Info(Resource): method_decorators = {'get':[login_requried]} def get(self): return g.user.to_dict() api.add_resource(Login,'/login') api.add_resource(Info,'/info') if __name__ == '__main__': app.run(debug=True)