我正在使用flask 及其flask-restful 扩展来制作一个简单的restful-api。我无法使用用户 ID(参考)将数据填充到问题表中。
model.py 文件如下:
class User(UserMixin, SurrogatePK, Model):
__tablename__ = 'users'
username = Column(db.String(80), unique=True, nullable=False)
email = Column(db.String(80), unique=True, nullable=False)
#: The hashed password
password = Column(db.String(128), nullable=True)
created_at = Column(db.DateTime, nullable=False, default=dt.datetime.utcnow)
def __init__(self, username, email, password=None, **kwargs):
db.Model.__init__(self, username=username, email=email, **kwargs)
if password:
self.set_password(password)
else:
self.password = None
def set_password(self, password):
self.password = bcrypt.generate_password_hash(password)
def check_password(self, value):
return bcrypt.check_password_hash(self.password, value)
def generate_auth_token(self, expiration = 600):
s = Serializer('secret_key', expires_in = expiration)
return s.dumps({ 'id': self.id …Run Code Online (Sandbox Code Playgroud) 每当我尝试使用flask_httpauth 为我的flask_restful 项目启用身份验证时,我都会收到此错误:
AttributeError: 'function' object has no attribute 'as_view'
Run Code Online (Sandbox Code Playgroud)
这是一个非常基本的示例:apicontroller.py:
from flask_restful import Resource, Api
from flasktest import api, app
from flask_httpauth import HTTPTokenAuth
auth = HTTPTokenAuth()
@auth.login_required
class ApiController(Resource):
def get(self):
return True
api.add_resource(ApiController, '/api/apicontroller')
Run Code Online (Sandbox Code Playgroud)
初始化.py:
from flask import render_template
from flask import Flask, request, render_template, session, flash, redirect, url_for, jsonify
from flask_restful import Resource, Api, reqparse, fields
from flask_httpauth import HTTPTokenAuth
app = Flask(__name__)
api = Api(app)
import flasktest.apicontroller
Run Code Online (Sandbox Code Playgroud)
每当我用 装饰控制器类时@auth.login_required,它都会失败并出现上述错误。我怎样才能解决这个问题?
如何在 Flask 的装饰器函数中获取发送请求的客户端的 IP 地址和端口?
from flask import Flask, request, jsonify
from functools import wraps
app = Flask(__name__)
def check_auth(f):
@wraps(f)
def decorated_function(*args, **kwargs):
print(request)
### Here I need the IP address and port of the client
return f(*args, **kwargs)
return decorated_function
@app.route('/test', methods=['POST'])
@check_auth
def hello():
json = request.json
json['nm'] = 'new name2'
jsonStr = jsonify(json)
return jsonStr
Run Code Online (Sandbox Code Playgroud) 我一直试图找出导致此输入类型错误的原因,但似乎无法弄清楚。
模型/pin.py
from sqlalchemy import Column, String
class Pin(db.Model):
__tablename__ = 'pin'
pin = Column(String, primary_key=True)
Run Code Online (Sandbox Code Playgroud)
模式/pin.py
from ..models.pin import Pin
from marshmallow import fields, validate
class PinSchema(ma.Schema):
pin = fields.Str(required=True, validate=[validate.Length(5)])
class Meta:
model = Pin
fields = ('pin')
pin_schema = PinSchema()
Run Code Online (Sandbox Code Playgroud)
资源/pin.py
from flask_restful import Resource
from flask import request
from ..schemas.pin import pin_schema
class PinResource(Resource):
"""
Update current pin
Expecting:
{
'pin': 'current_pin'
'new_pin': 'new_pin'
}
"""
def patch(self):
data = request.get_json()
errors = pin_schema.validate(data['new_pin'])
if errors: …Run Code Online (Sandbox Code Playgroud) 大家好我是Python Flask的新手。阅读完基本手册后,我尝试创建一个示例Flask应用程序,并在我的机器上成功完成了该工作。
我的代码(取自各种教程)如下:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def main():
return "Welcome!"
if __name__ == "__main__":
app.run()
Run Code Online (Sandbox Code Playgroud)
如您所知,此应用程序将打印“ Welcome!”。每当我点击http://127.0.0.1:5000/。但是,当我尝试通过使用系统的IP地址替换127.0.0.1从同一网络中的其他计算机访问应用程序时,出现“网络错误(tcp_error)连接被拒绝”错误
关于如何从另一台计算机访问Flask应用程序(在一台计算机上创建)的任何输入都将有所帮助