Flask_RESTful结合蓝图使用
在蓝图中,如果使用Flask_RESTful
,那么在创建Api
对象的时候,使用蓝图对象,不再是使用app
对象了.
蓝图news.py文件:
from flask import url_for,render_template,Blueprint,make_response,Response
from flask_restful import Api,Resource,reqparse,inputs,fields,marshal_with
import json
news_bp = Blueprint('news',__name__,url_prefix='/news')
api = Api(news_bp)
#1.flask-restful结合蓝图使用
#复杂的参数结构
#实体间关系有 1:1 1:n n:n(转为2个1:n)
#新闻系统后台 用户 新闻 新闻标签
class User():
def __init__(self,id,uname,age):
self.id = id
self.uname = uname
self.age = age
def __repr__(self):
return "<User:{id},{uname},{age}>"\
.format(id=self.id, uname=self.uname,age=self.age)
class News():
def __init__(self,id,title,content):
self.id=id
self.title=title
self.content=content
#关系映射
self.author=None
self.tags=[]
def __repr__(self):
return "<News:{id},{title},{content},{author},{tags}>"\
.format(id=self.id, title=self.title,\
content=self.content,author=self.author,tags=self.tags)
class NewsTag():
def __init__(self,id,name):
self.id=id
self.name=name
def __repr__(self):
return '<NewsTage:{id},{name}>'\
.format(id =self.id , name=self.name)
def createData():
user = User(110,'悟空',555)
tag1 = NewsTag(200,"要闻")
tag2 = NewsTag(210,"娱乐")
news =News(300,'吴京征服了世界上海拔最高的派出所','4月23日中午11点,吴京发了一条微博,配文“世界上海拔最高的派出所”,并@了另外一名演员张译。微博中有两张图片,第一张是吴京和张译两人坐在地上的合照,背后几个大字“中国边防”。第二张则是两人与派出所民警们的合照。 ')
news.author = user
#绑定新闻作者
news.tags.append(tag1)
#绑定新闻标签1
news.tags.append(tag2)
#绑定新闻标签2
print(news)
return news
class NewsView2(Resource):
resource_fields={
'id':fields.Integer,
'title': fields.String,
'content': fields.String,
#如在一个字段下面又是一个字典,那么可以使用fields.Nested({...})
'author': fields.Nested({
'id': fields.Integer,
'uname': fields.String,
'age':fields.Integer }),
#如要在一个字段中放置一个列表,那么可以使用fields.List(fields.Nested({...}))
'tags': fields.List(fields.Nested({
'id': fields.Integer,
'name': fields.String })) }
@marshal_with(resource_fields)
def get(self):
news = createData()
return news
api.add_resource(NewsView2,'/news2/')
app.py文件:
from flask import Flask,url_for,render_template
from blueprints.news import news_bp
app = Flask(__name__)
app.register_blueprint(news_bp)
@app.route('/')
def hello_world():
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True)
来源:CSDN
作者:Python'sGod
链接:https://blog.csdn.net/weixin_44733660/article/details/104060697