def test_api_decorators(client, flask_app): global AUTHENTICATED api = Api(flask_app, request_decorators=[auth_required]) api.add_model(Company) assert client.get('/company').status_code == 403 assert client.post('/company', data={'name': 'Terran'}, headers={'auth': True}).status_code == 201 assert client.get('/company', headers={'auth': True}).status_code == 200
def init_app(flask_app): flask_app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:' flask_app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db.init_app(flask_app) api = Api(flask_app) api.add_model(Hero, "/heroes") if '--seed-test' in sys.argv: with flask_app.app_context(): seed_test_data()
def test_add_rule_decorators(client, flask_app): def hello_world(): return "hello world" api = Api(flask_app, request_decorators=[auth_required]) api.add_url_rule("/", "index", hello_world, request_decorators={"POST": [post_hook]}) resp = client.get("/") assert resp.status_code == 403 resp = client.post("/", headers={"auth": True}) assert resp.status_code == 200 assert resp.data == b"hello worldpost_hook"
def test_url_rule(flask_app, client): def hello_world(name): return f"hello {name}" api = Api(flask_app) api.add_url_rule("/<string:name>", "index", hello_world) resp = client.get("/raynor") assert resp.status_code == 200 assert resp.data == b"hello raynor" resp = client.post("/kerrigan") assert resp.status_code == 200 assert resp.data == b"hello kerrigan" resp = client.put("/artanis") assert resp.status_code == 200 assert resp.data == b"hello artanis" resp = client.delete("/zeratul") assert resp.status_code == 200 assert resp.data == b"hello zeratul"
def test_api_creation(client, flask_app): api = Api(flask_app) api.add_model(Company) api.add_model(Company, collection_name='extern_company') assert client.get('/company').status_code == 200 assert client.get('/extern_company').status_code == 200
def test_http_verbs(flask_app, client, methods): def ping(*args, **kwargs): return "ping" api = Api(flask_app) api.add_resource( ViewFunctionResource, "/ping", "ping", resource_init_args=(ping, ), methods=methods, ) resp = client.get("/ping") assert resp.status_code == 200 if "GET_COLLECTION" in methods else 405 resp = client.get("/ping/1") assert resp.status_code == 200 if "GET" in methods else 405 resp = client.post("/ping") assert resp.status_code == 200 if "POST" in methods else 405 resp = client.delete("/ping/1") assert resp.status_code == 200 if "PUT" in methods else 405 resp = client.put("/ping/1") assert resp.status_code == 200 if "DELETE" in methods else 405
def init_test_data(flask_app, db_session): for name, location in CLIENTS: company = Company(name=name, location=location) db_session.add(company) address = Address(street="5th Av.") emp1 = Employee(firstname="John", lastname="Doe", address=address) db_session.add(address) db_session.add(emp1) db_session.commit() api = Api(flask_app) api.add_model(Company) api.add_model(Employee, serializer_class=EmployeeSerializer) api.add_relation(Company.employees, serializer_class=EmployeeSerializer) return api
def __init__(self, model_class): """ :param Type[DeclarativeMeta] model_class: the SQLAlchemy mapping class to be serialized """ self._mapper_class = model_class self._fields = self._get_declared_fields() # Collect columns not declared in the serializer for column in self.model_columns.keys(): field = self._fields.setdefault(column, Field()) # Set a serializer for fields that can not be serialized by default if field.serializer is None: from flask_restalchemy import Api serializer = Api.find_column_serializer( self.model_columns.get(column)) field._serializer = serializer
def test_route(flask_app, client): api = Api(flask_app) @api.route("/hello/<string:name>") def hello_world(name): return f"hello {name}" resp = client.get("/hello/raynor") assert resp.status_code == 200 assert resp.data == b"hello raynor" resp = client.post("/hello/kerrigan") assert resp.status_code == 200 assert resp.data == b"hello kerrigan"
def test_resource_decorators(client, flask_app): api = Api(flask_app) api.add_model(Company) api.add_model(Address, request_decorators=[auth_required]) assert client.get('/address').status_code == 403 assert client.post('/address', data={'steet': '5 Av'}).status_code == 403 assert client.get('/company', data={'name': 'Terran'}).status_code == 200 assert client.post('/company', data={'name': 'Terran'}).status_code == 201 assert client.post('/address', data={'id': 2, 'street': '5 Av'}, headers={'auth': True}).status_code == 201 assert client.post('/company', data={'name': 'Terran'}, headers={'auth': True}).status_code == 201 assert client.get('/address/2').status_code == 403 assert client.get('/address/2', headers={'auth': True}).status_code == 200
def test_api_decorators(client, flask_app): api = Api(flask_app, request_decorators=[auth_required]) api.add_model(Company) api.add_model(Address, request_decorators=[post_hook]) assert client.get("/company").status_code == 403 assert (client.post("/company", data={ "name": "Terran" }, headers={ "auth": True }).status_code == 201) assert client.get("/company", headers={"auth": True}).status_code == 200 response = client.post("/address", headers={"auth": True})
def test_resource_decorators(client, flask_app): api = Api(flask_app) api.add_model(Company, request_decorators=[auth_required]) api.add_model(Address) assert client.get("/company").status_code == 403 assert client.post("/company", data={"name": "Terran"}).status_code == 403 assert client.get("/address").status_code == 200 assert client.post("/address", data={"street": "5 Av"}).status_code == 201 resp = client.post("/company", data={ "id": 2, "name": "Protoss" }, headers={"auth": True}) assert resp.status_code == 201 assert client.get("/company/2").status_code == 403 assert client.get("/company/2", headers={"auth": True}).status_code == 200
username = db.Column(db.String(80), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) class UserView(ModelView): can_delete = True # disable model deletion app = Flask("tour-of-heroes") app.secret_key = 'super secret key' app.config['FLASK_ADMIN_SWATCH'] = 'cerulean' app.config[ 'SQLALCHEMY_DATABASE_URI'] = 'mysql://*****:*****@#@47.104.80.155/javaweb' db.init_app(app) # Must be called before Api object creation @app.route("/create_db", methods=["GET"]) def create_db(): db.create_all() return "DB created" api = Api(app) api.add_model(User, "/users") admin = Admin(app, name='统一后台管理模板', template_mode='bootstrap3') admin.add_view(UserView(User, db.session)) if __name__ == "__main__": app.run()
# 第一次运行需要执行这个 localhost:5000/create_db 创建所有的表 @app.route("/create_db", methods=["GET"]) def create_db(): db.create_all() return "DB created" @app.route('/add', methods=['GET']) def add_data(): soup = BeautifulSoup( requests.get('https://www.kankanwu.com/Animation/').content) for a in soup.select('dd > a'): try: db.session.add(Movie(movie_title=a['title'], movie_href=a['href'])) db.session.commit() except Exception as e: print(e) # RestAPI 配置部分 api = Api(app) api.add_model(Movie, "/movies") # 后台管理页面 admin = Admin(app, name='统一后台管理模板', template_mode='bootstrap3') admin.add_view(MovieView(Movie, db.session)) if __name__ == "__main__": app.run()
from sqlalchemy import Column, String, Integer db = SQLAlchemy() class Hero(db.Model): id = Column(Integer, primary_key=True) name = Column(String) secret_name = Column(String) app = Flask("tour-of-heroes") @app.route("/create_db", methods=["POST"]) def create_db(): db.create_all() return "DB created" # Set an SQLite in-memory database app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///:memory:" db.init_app(app) # Must be called before Api object creation api = Api(app) api.add_model(Hero, "/heroes") if __name__ == "__main__": app.run()
def blueprint(flask_app): test_blueprint = Blueprint("test", __name__, url_prefix="/bp") api = Api(test_blueprint) api.add_model(Company) api.add_model(Employee) flask_app.register_blueprint(test_blueprint)
def sample_api(flask_app): api = Api(flask_app) api.add_model(Company) api.add_model(Company, view_name="alt_company") api.add_model(Employee, serializer_class=EmployeeSerializer)
from flask import Flask from flask_restalchemy import Api from flask_sqlalchemy import SQLAlchemy from sqlalchemy import Column, String, Integer app = Flask('tour-of-heroes') db = SQLAlchemy() class Heroe(db.Model): id = Column(Integer, primary_key=True) name = Column(String) # Set an SQLite in-memory database app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:' db.init_app(app) # Must be called before Api object creation api = Api(app) api.add_model(Heroe, '/heroes') @app.route('/create_db', methods=['POST']) def create_db(): db.create_all() # Remove this in production code return 'DB created' if __name__ == '__main__': app.run()
def sample_api(flask_app): api = Api(flask_app) api.add_model(Employee) return api
def sample_api(flask_app): api = Api(flask_app) api.add_model(Company) api.add_model(Employee, serializer_class=EmployeeSerializer) api.add_relation(Company.employees, serializer_class=EmployeeSerializer) return api
# 第一次运行需要执行这个 localhost:5000/create_db 创建所有的表 @app.route("/create_db", methods=["GET"]) def create_db(): db.create_all() return "DB created" @app.route('/addusers', methods=['GET']) def add_users(): for i in range(10000, 20000): u = User(username='******' % i, email='*****@*****.**' % i) db.session.add(u) db.session.commit() pass # RestAPI 配置部分 api = Api(app) api.add_model(User, "/users") api.add_model(Job, "/jobs") # 后台管理部分 admin = Admin(app, name='统一后台管理模板', template_mode='bootstrap3') admin.add_view(UserView(User, db.session)) admin.add_view(JobView(Job, db.session)) if __name__ == "__main__": app.run()
import os from flask import Flask from flask_restalchemy import Api from declarative import db from model.acordo_leniencia import AcordoLeniencia from model.empresa import Empresa from serializer.acordo_leniencia import AcordoLenienciaSerializer app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('DATABASE_URL', 'sqlite:///:memory:') db.init_app(app) api = Api(app) api.add_model(Empresa) api.add_model(AcordoLeniencia, serializer_class=AcordoLenienciaSerializer) api.add_relation(Empresa.acordoLeniencia, serializer_class=AcordoLenienciaSerializer) @app.route("/") def hello(): return u'Olá mundo!' @app.route("/init_db") def create_db(): db.drop_all()
def sample_api(flask_app): api = Api(flask_app) api.add_model(Company) api.add_model(Employee) api.add_relation(Company.employees, serializer_class=EmployeeSerializer) api.add_property(Employee, Employee, "colleagues", serializer_class=EmployeeSerializer) api.add_relation(Employee.departments) return api
def sample_api(flask_app): return Api(flask_app)