Flask框架之Flask_RESTful结合蓝图使用

半世苍凉 提交于 2020-01-24 02:44:00

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)

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!