def init_app(app): for version in routes.ROUTES: SWAGGER_URL = f'/{version}/api/docs' API_URL = f'/static/{version}/swagger.json' blueprint = Blueprint(version, __name__) module = 'project.server.controllers.%s.' % version swaggerui_blueprint = get_swaggerui_blueprint( SWAGGER_URL, API_URL, config={'app_name': "Sql Module"}, ) for route in routes.ROUTES[version]: endpoint = route.get('endpoint') function = route.get('function') method = route.get('method') rule = route.get('rule') opts = route.get('opts', {}) auth_required = opts.get('auth_required', False) __import__(module + endpoint, fromlist=['']) view_function = restful.restful(**opts)(getattr( sys.modules[module + endpoint], function)) if auth_required: view_function = jwt_required( restful.restful(**opts)(getattr( sys.modules[module + endpoint], function))) blueprint.add_url_rule(rule, endpoint=endpoint + ' ' + function, view_func=view_function, methods=[method], strict_slashes=False) app.register_blueprint(blueprint, url_prefix='/' + version) app.register_blueprint(swaggerui_blueprint, url_prefix=SWAGGER_URL)
def register(self): blueprint = Blueprint("index", __name__, template_folder="templates") blueprint.add_url_rule("/", "default", self.render_default) blueprint.add_url_rule("/data", "data", self.render_data) blueprint.add_url_rule("/graph", "graph", self.render_graph) blueprint.add_url_rule("/graph.json", "graph_data", self.render_graph_data) blueprint.add_url_rule("/ble", "ble", self.render_ble) blueprint.context_processor(self.fill) return blueprint
def create(): blueprint = Blueprint('people', 'people') blueprint.add_url_rule( '/person', view_func=PeopleListOrCreateView.as_view('people-list-or-create'), ) return blueprint
def build_auth_entry(): bp_entry = Blueprint("auth", __name__) bp_entry.add_url_rule("/login", endpoint='ep_login', view_func=template_controller.login, methods=['GET']) rest_api = Api(bp_entry) rest_api.add_resource(auth_resource.LoginResource, 'login_api') rest_api.add_resource(auth_resource.UserResource, 'user_api') rest_api.add_resource(auth_resource.AuthResource, 'auth_api') return bp_entry
def init_app(app): for version in routes.ROUTES: blueprint = Blueprint(version, __name__) module = 'project.server.controllers.%s.' % version for route in routes.ROUTES[version]: endpoint = route.get('endpoint') function = route.get('function') method = route.get('method') rule = route.get('rule') __import__(module + endpoint, fromlist=['']) blueprint.add_url_rule(rule, endpoint=endpoint + ' ' + function, view_func=getattr( sys.modules[module + endpoint], function), methods=[method], strict_slashes=False) app.register_blueprint(blueprint, url_prefix='/' + version)
def init_app(self, app: Flask): install_apps = app.config.get("INSTALL_APPS", []) for app_str in install_apps: mod_path = f"{app_str}.urls" try: urls = get_mod_attr(mod_path, "urls") b = Blueprint(import_name=mod_path, name=app_str) for url in urls: if isinstance(url, Url): b.add_url_rule(rule=url.rule, endpoint=url.endpoint, view_func=url.view_func, **url.options) app.register_blueprint(b) except ImportError as e: app.logger.warn(f"Import module {mod_path} err {e}") except IndexError as e: app.logger.warn(f"Split module {mod_path} attr error {e}") except AttributeError as e: app.logger.warn( f"Get attr from url module {mod_path}, error {e}")
def create_module_blueprint(self, model, methods=READONLY_METHODS, url_prefix='/module', module_name=None, jqgrid=None, module_link=None, authentication_required=None, template_name=None, template_folder=None, form=None, view=ModuleView): if module_name is None: module_name = model.__tablename__ view_endpoint = '/%s' % module_name apiname = ModuleManager.APINAME_FORMAT % module_name if jqgrid == None: pager = "jqgrid_%s_pager" % module_name jqgrid = JqGrid(self.model, data_url='api'+view_endpoint, pager_id=pager) if template_name is None: template_name = 'core/simple_crud.html' view_func = view.as_view(apiname, template_name=template_name, jqgrid=jqgrid, model=model, module_name=module_name) blueprintname = self._next_blueprint_name(apiname) if template_folder: blueprint = Blueprint(blueprintname, __name__, url_prefix=url_prefix, template_folder=template_folder) else: blueprint = Blueprint(blueprintname, __name__, url_prefix=url_prefix) # endpoint functions views blueprint.add_url_rule(view_endpoint+'/<method>', view_func=view_func) url_view = url_prefix + view_endpoint + '/view' if module_link: module_link['url'] = url_view self.app.config['MODULE_LIST'].append(module_link) else: module_link = {'url':url_view, 'label':module_name.title(), 'icon_class':'nails'} self.app.config['MODULE_LIST'].append(module_link) return blueprint
class BalanceController(BaseView): def get(self): self.get_user(request) user_stocks = (session.query(mx.StockBalance).filter( mx.StockBalance.user_id == self.user.id).all()) data = { 'money': get_money(session, self.user.id), 'stocks': [{ 'stock_id': item.stock_id, 'balance': get_stocks( session, self.user.id, item.stock_id, ), } for item in user_stocks] } return json_data(data) balance.add_url_rule( '/', view_func=BalanceController.as_view('tickets_view'), methods=['GET'], )
article.content = content DBSession.commit() flash(MSG_SAVE_SUCC, MESSAGE_INFO) return redirect(url_for('.view', action = 'listArticle', appid = article.app_id)) except: DBSession.rollback() traceback.print_exc() flash(MSG_SERVER_ERROR, MESSAGE_ERROR) return redirect(url_for('.view', action = 'updateArticle', id = aid)) def delArticle(self): aid = _g('id') if not aid : flash(MSG_NO_ID_SUPPLIED, MESSAGE_WARNING) return redirect(url_for('.view')) try: article = DBSession.query(AppArticle).get(aid) article.active = 1 DBSession.commit() flash(MSG_DELETE_SUCC, MESSAGE_INFO) return redirect(url_for('.view', action = 'listArticle', appid = article.app_id)) except: DBSession.rollback() flash(MSG_SERVER_ERROR, MESSAGE_ERROR) return redirect(url_for('.view', action = 'updateArticle', id = aid)) bpConsoles.add_url_rule('/', view_func = ConsolesView.as_view('view'), defaults = {'action':'index'}) bpConsoles.add_url_rule('/<action>', view_func = ConsolesView.as_view('view'))
current_app.logger.error(e) if result == 0: return jsonify(SUCCESS()) elif result == 1: return jsonify(PERMISSION_DENIED_ERROR) elif result == 2: return jsonify(USER_AGENT_MEMBER_NOT_NULL) elif result == 3: return jsonify(POST_PARA_ERROR) else: return jsonify(OTHER_ERROR) # 创建代理 user_agent_bp.add_url_rule('/create', methods=['POST'], view_func=CreateAgent.as_view('create_agent')) # 查询所有代理 user_agent_bp.add_url_rule('/all', methods=['POST'], view_func=QueryAllAgent.as_view('all_agent')) # 查询单个代理,通过id user_agent_bp.add_url_rule( '/query/<agent_id>', methods=['POST'], view_func=QueryAgentByID.as_view('query_agent_by_id')) # 通过id修改代理 user_agent_bp.add_url_rule( '/update/<agent_id>', methods=['POST'], view_func=ChangeAgentByID.as_view('update_agent_by_id'))
# coding=utf-8 from __future__ import absolute_import from flask.views import MethodView from flask.blueprints import Blueprint from firefly.models.topic import Category, Post from firefly.libs.template import render_template bp = Blueprint("category", __name__, url_prefix="/category") class CategoryView(MethodView): def get(self, slug): category = Category.objects.get_or_404(_slug=slug) posts = Post.objects.filter( category=category ).order_by("-recent_activity_time") return render_template('categories/detail.html', category=category.name, posts=posts) bp.add_url_rule('/<slug>/', view_func=CategoryView.as_view('detail'))
from flask.blueprints import Blueprint from app.views.index.views import IndexView index_bp = Blueprint('index', __name__, template_folder='index') index_bp.add_url_rule('/', view_func=IndexView.as_view('index'))
ticket = TicketModel.add_to_process(data.get('processId'), data.get('ticket')) return {'ticket': ticket} def delete(self, _id): res = TicketModel.delete_from_process(request.args.get('processId'), _id) return {'ticket': res} def patch(self, _id): data = request_data_to_dict(request.form) # Move ticket to another process if 'oldProcessId' in data and 'newProcessId' in data: ticket = TicketModel.move_to_process( old_process_id=data.get('oldProcessId'), new_process_id=data.get('newProcessId'), ticket=data.get('ticket') ) # Edit existing ticket else: ticket = TicketModel.modify(data.get('processId'), _id, data.get('ticket')) return {'ticket': ticket} ticket_blueprint = Blueprint('ticket_blueprint', __name__) ticket_view = TicketResource.as_view('ticket_view') ticket_blueprint.add_url_rule('/tickets', 'tickets', ticket_view) ticket_blueprint.add_url_rule('/tickets/<string:_id>', 'ticket', ticket_view)
obj.full_path = new_full_path obj.full_path_ids = new_full_ids[:-1] DBSession.commit() flash(MSG_SAVE_SUCC, MESSAGE_INFO) # except: # DBSession.rollback() # _error(traceback.print_exc()) # flash(MSG_SERVER_ERROR, MESSAGE_ERROR) return redirect(self.default()) @templated('warehouse/view_items.html') def view_items(self): id = _g('id') w = DBSession.query(InventoryLocation).get(id) ids = w.full_path_ids.split("|") result = DBSession.query(InventoryItem, InventoryLocation).filter(and_( InventoryItem.active == 0, InventoryItem.location_id.in_(ids), InventoryLocation.active == 0, InventoryItem.location_id == InventoryLocation, )).order_by(InventoryItem.create_time).all() return {'result' : result , 'location' : w} bpWarehouse.add_url_rule('/', view_func = WarehouseView.as_view('view'), defaults = {'action':'index'}) bpWarehouse.add_url_rule('/<action>', view_func = WarehouseView.as_view('view'))
__all__ = ['bpMaster'] bpMaster = Blueprint('bpMaster', __name__) class MasterView(BasicView): def index(self): type = _g('type') master_mapping = { 'customer' : Customer, # 'vendor' : Vendor, # 'item' : Item, } if type not in master_mapping : flash(MSG_NO_SUCH_ACTION, MESSAGE_ERROR) return redirect('/index') clz = master_mapping[type] result = DBSession.query(clz).filter(clz.active == 0).order_by(clz.name) return render_template('master/%s_index.html' % type, result = result) def update(self): return '' bpMaster.add_url_rule('/', view_func = MasterView.as_view('view'), defaults = {'action':'index'}) bpMaster.add_url_rule('/<action>', view_func = MasterView.as_view('view'))
def get(self): return redirect(url_for('home.index')) def post(self): form = LoginForm() if form.validate_on_submit(): login_user(form.user) return redirect(url_for('home.index')) class RegisterView(MethodView): def get(self): return redirect(url_for('home.index')) def post(self): form = RegisterForm() if form.validate_on_submit(): user = form.save() login_user(user) return redirect(url_for('home.index')) bp.add_url_rule('/', view_func=HomeView.as_view('index')) bp.add_url_rule('create/topic', view_func=CreateTopicView.as_view('create_topic')) bp.add_url_rule('create/comment', view_func=CreateCommentView.as_view('create_comment')) bp.add_url_rule('login', view_func=LoginView.as_view('login')) bp.add_url_rule('register', view_func=RegisterView.as_view('register'))
result = SmUserMemberService.admin_delete_by_id(self.member_id) if result == 0: return jsonify(SUCCESS()) elif result == 1: return jsonify(QUERY_NO_RESULT) elif result == 2: return jsonify(OTHER_ERROR) except Exception as e: # 参数解析错误 current_app.logger.error(e) return jsonify(OTHER_ERROR) return jsonify(OTHER_ERROR) # 创建会员 user_member_bp.add_url_rule('/create', methods=['POST'], view_func=CreateMember.as_view('create_member')) # 查询所有会员 user_member_bp.add_url_rule('/all', methods=['POST'], view_func=QueryAllMember.as_view('all_member')) # 查询单个会员,通过id user_member_bp.add_url_rule( '/query/<member_id>', methods=['POST'], view_func=QueryMemberByID.as_view('query_member_by_id')) # 通过id修改会员 user_member_bp.add_url_rule( '/update/<member_id>', methods=['POST'], view_func=ChangeMemberByID.as_view('update_member_by_id'))
class CreateView(MethodView): def post(self): title = request.form.get('title') content = request.form.get('content') category_id = request.form.get('category', '') if category_id.isdigit(): category_id = int(category_id) category = Category.objects.filter(id=category_id).first() post = Post(title=title, content=content, category=category) post.save() return jsonify(ok=0) class LoginView(MethodView): def get(self): if current_user.is_authenticated(): return redirect(url_for('index')) return render_template('login.html') class LogoutView(MethodView): def get(self): logout_user() return redirect(url_for('index')) bp.add_url_rule('/', view_func=HomeView.as_view('index')) bp.add_url_rule('create', view_func=CreateView.as_view('create')) bp.add_url_rule('login', view_func=LogoutView.as_view('login')) bp.add_url_rule('logout', view_func=LogoutView.as_view('logout'))
from flask import url_for, redirect from flask.views import MethodView from flask.blueprints import Blueprint from flask.ext.login import login_required, current_user from firefly.libs.template import render_template from firefly.forms.user import ProfileForm bp = Blueprint('user', __name__, url_prefix='/user') class UserView(MethodView): def get(self, id): return '' class UserSettingsView(MethodView): decorators = [login_required] def get(self): return render_template('user/settings.html', user=current_user) def post(self): form = ProfileForm() form.save() return redirect(url_for('user.settings')) bp.add_url_rule('/<id>/', view_func=UserView.as_view('detail')) bp.add_url_rule('/settings', view_func=UserSettingsView.as_view('settings'))
# coding=utf-8 from __future__ import absolute_import from flask.views import MethodView from flask.blueprints import Blueprint bp = Blueprint('user', __name__, url_prefix='/user') class UserView(MethodView): def get(self, id): return '' bp.add_url_rule('/<id>/', view_func=UserView.as_view('detail'))
from flask.blueprints import Blueprint from test.views import DetailView testxx = Blueprint("test", __name__) testxx.add_url_rule('/',view_func=DetailView.as_view('detail'))
# coding=utf-8 from flask.blueprints import Blueprint from flask.globals import request from api.core.views import BaseResourceView from api.models.user import UserModel class UserResource(BaseResourceView): """ Resource for authentication """ def get(self): # Search user users = UserModel.search( keyword=request.args.get('keyword'), fields=('username', '_id') ) return {'users': users} def post(self, _id=None): UserModel.register(request.form) return 'ok' user_blueprint = Blueprint('user_blueprint', __name__) user_view = UserResource.as_view('user_view') user_blueprint.add_url_rule('/users', 'users', user_view) user_blueprint.add_url_rule('/users/<string:_id>', 'user', user_view)
current_app.logger.error(e) return jsonify(POST_PARA_ERROR) def response_agent(self): try: result = SmClerkService.query_all(agent_id=self.u_id, **self.unpack_para(request.json)) self.pop_no_need(result['rows']) return jsonify(SUCCESS(result)) except Exception as e: current_app.logger.error(e) return jsonify(POST_PARA_ERROR) # 创建业务员 clerk_bp.add_url_rule('/create', methods=['POST'], view_func=ClerkCreateView.as_view('clerk_create')) # 删除业务员-----通过id clerk_bp.add_url_rule('/delete/<clerk_id>', methods=['POST'], view_func=DeleteClerkByID.as_view('clerk_delete')) # 更新业务员-----通过id clerk_bp.add_url_rule('/update/<clerk_id>', methods=['POST'], view_func=UpdateClerkByID.as_view('clerk_update')) # 查询所有业务员 clerk_bp.add_url_rule('/all', methods=['POST'], view_func=QueryAllView.as_view('clerk_query_all'))
from flask.blueprints import Blueprint v1_telegram = Blueprint('v1_telegram', __name__) from .controllers import * v1_telegram.add_url_rule('/msg', view_func=ManagerTelegram.as_view('ManagerTelegram')) v1_telegram.add_url_rule('/webhook', view_func=ManagerWebhook.as_view('ManagerWebhook'))
title = request.form.get("title") content = request.form.get("content") category_id = request.form.get("category", "") if category_id.isdigit(): category_id = int(category_id) category = Category.objects.filter(id=category_id).first() post = Post(title=title, content=content, category=category) post.save() html = render_template_def("/widgets/topic_item.html", "main", post=post, is_new=True) return jsonify(ok=0, html=html) class LoginView(MethodView): def get(self): if current_user.is_authenticated(): return redirect(url_for("index")) return render_template("login.html") class LogoutView(MethodView): def get(self): logout_user() return redirect(url_for("index")) bp.add_url_rule("/", view_func=HomeView.as_view("index")) bp.add_url_rule("create", view_func=CreateView.as_view("create")) bp.add_url_rule("login", view_func=LoginView.as_view("login")) bp.add_url_rule("logout", view_func=LogoutView.as_view("logout"))
def get(self): processes = ProcessModel.query(spec={}) return {'processes': [p for p in processes]} def post(self): process = request.form.to_dict() process_id = ProcessModel.create(process) return {'process': {'_id': process_id}} def delete(self, _id): ProcessModel.delete(_id) return {'process': {}} def patch(self, _id): process = request.form.to_dict() # Get id of process will be updated _id = process['_id'] # Delete _id in process for update process without touching _id del process['_id'] process = ProcessModel.modify(_id, process) return {'process': process} process_blueprint = Blueprint('process_blueprint', __name__) process_view = ProcessResource.as_view('process_view') process_blueprint.add_url_rule('/processes', 'processes', process_view) process_blueprint.add_url_rule('/processes/<string:_id>', 'process', process_view)
data.get('ticket')) return {'ticket': ticket} def delete(self, _id): res = TicketModel.delete_from_process(request.args.get('processId'), _id) return {'ticket': res} def patch(self, _id): data = request_data_to_dict(request.form) # Move ticket to another process if 'oldProcessId' in data and 'newProcessId' in data: ticket = TicketModel.move_to_process( old_process_id=data.get('oldProcessId'), new_process_id=data.get('newProcessId'), ticket=data.get('ticket')) # Edit existing ticket else: ticket = TicketModel.modify(data.get('processId'), _id, data.get('ticket')) return {'ticket': ticket} ticket_blueprint = Blueprint('ticket_blueprint', __name__) ticket_view = TicketResource.as_view('ticket_view') ticket_blueprint.add_url_rule('/tickets', 'tickets', ticket_view) ticket_blueprint.add_url_rule('/tickets/<string:_id>', 'ticket', ticket_view)
class LoginView(MethodView): def get(self): return redirect(url_for('home.index')) def post(self): # TODO 解决在首页登录框中无法获取 csrf_token 的问题 form = LoginForm(csrf_enabled=False) if form.validate_on_submit(): login_user(form.user) return redirect(url_for('home.index')) class RegisterView(MethodView): def get(self): return redirect(url_for('home.index')) def post(self): form = RegisterForm(csrf_enabled=False) if form.validate_on_submit(): user = form.save() login_user(user) return redirect(url_for('home.index')) bp.add_url_rule('/', view_func=HomeView.as_view('index')) bp.add_url_rule('create', view_func=CreateView.as_view('create')) bp.add_url_rule('login', view_func=LoginView.as_view('login')) bp.add_url_rule('register', view_func=RegisterView.as_view('register'))
if waitlist_id is None: waitlists = db.session.query(Waitlist).all() return jsonify(make_json_waitlists_base_data(waitlists)) else: waitlist = db.session.query(Waitlist).get(waitlist_id) if waitlist is None: flask.abort(404, "No such waitlist") if waitlist_id is None: flask.abort(404, 'No Waitlist with this ID found') return jsonify(make_json_waitlist_base_data(waitlist)) groups_view = WaitlistGroupsAPI.as_view('groups') waitlist_base_view = WaitlistBaseDataAPI.as_view('wlbasedata') bp.add_url_rule(rule='/groups/', defaults={'group_id': None}, view_func=groups_view, methods=['GET']) bp.add_url_rule(rule='/groups/<int:group_id>', view_func=groups_view, methods=['GET']) bp.add_url_rule(rule='/waitlists/', defaults={'waitlist_id': None}, view_func=waitlist_base_view, methods=['GET']) bp.add_url_rule(rule='/waitlists/<int:waitlist_id>', view_func=waitlist_base_view, methods=['GET'])
def listen_func() -> str: """ 行情报价的处理函数.接受交易平台推送过来的实时报价. 典型的url: """ headers = request.headers mes = {"message": "success"} headers = { k.lower(): (v.lower() if isinstance(v, str) else v) for k, v in headers.items() } auth_req = headers.get("x-auth", "") auth_str = "274e9735e2c94d60bd903e45c96fc3b6" # if auth_str != auth_req: # return abort(404) # else: # mes = {"message": "success"} return json.dumps(mes) """集中注册函数""" quotations_blueprint.add_url_rule(rule="/", view_func=index_func, methods=['get', 'post']) # hello world quotations_blueprint.add_url_rule(rule="/listen", view_func=listen_func, methods=['get', 'post']) # 接收实时行情
def register(self): blueprint = Blueprint("index", __name__, template_folder="templates") blueprint.add_url_rule("/", "default", self.render_default) blueprint.add_url_rule("/data", "data", self.render_data) blueprint.add_url_rule("/graph", "graph", self.render_graph) blueprint.add_url_rule("/graph.json", "graph_data", self.render_graph_data) blueprint.add_url_rule("/setup", "setup", self.render_setup, methods=["GET", "POST"]) blueprint.add_url_rule("/ble", "ble", self.render_ble) blueprint.add_url_rule("/serial", "serial", self.render_serial) blueprint.add_url_rule("/tc66c-import", "tc66c_import", self.render_tc66c_import, methods=["GET", "POST"]) blueprint.context_processor(self.fill) return blueprint
user = AuthModel.get_current_user() return {'user': user} def post(self): """ Login user """ user = AuthModel.auth(request.form.get('username'), request.form.get('password')) if user: session_id = AuthModel.login(user) resp = jsonify({'user': user}) resp.set_cookie(SESSION_NAME, session_id) return resp else: raise CannotLogin('Cannot login user. Please verify your information.') def delete(self): """ Logout user """ resp = Response() session_id = request.cookies.get(SESSION_NAME) if session_id: Db.sessions.remove({'_id': session_id}) resp.set_cookie(SESSION_NAME, '', expires=0) return resp auth_blueprint = Blueprint('auth_blueprint', __name__) auth_view = AuthResource.as_view('auth_view') auth_blueprint.add_url_rule('/auth', 'auth', auth_view)
data = r['data'] data = BytesIO(initial_bytes=data) resp = make_response( send_file(data, attachment_filename=file_name, as_attachment=True, mimetype=mime_type)) return resp else: mes['message'] = '无效的id' else: mes['message'] = "不支持的操作" return json.dumps(mes) def page_flash_images(): """ 分页显示闪卡 :return: """ """集中注册函数""" """hello""" flash_blueprint.add_url_rule(rule="/hello", view_func=hello, methods=['get', 'post']) """保存或者获取文件(mongodb存储)""" flash_blueprint.add_url_rule(rule="/file/<action>/<table_name>", view_func=file_func, methods=['post', 'get'])
# coding=utf-8 from flask import request from flask.views import MethodView from flask.blueprints import Blueprint from flask_mako import render_template from firefly.models.consts import KEYBOARD_URL_MAPS bp = Blueprint('keyboard', __name__, url_prefix='/keyboard') class KeyboardView(MethodView): def get(self): url = request.args.get('url', '') url_pattern = url.rsplit('/', 1)[0] keyboards = KEYBOARD_URL_MAPS['default'] if url_pattern in KEYBOARD_URL_MAPS: keyboards += KEYBOARD_URL_MAPS[url_pattern] return render_template('widgets/keyboard.html', keyboards=keyboards) bp.add_url_rule('/', view_func=KeyboardView.as_view('keyboard'))
mes['message'] = ms elif the_type == "un_follow": """反跟随老师""" mes = WXUser.un_follow(user_id=user['_id']) else: ms = "未知的操作:{}".format(the_type) logger.exception(msg=ms) mes['message'] = ms return json.dumps(mes) """集中注册函数""" """hello""" user_blueprint.add_url_rule(rule="/hello", view_func=hello, methods=['get', 'post']) """短信的发送和验证 send/check""" user_blueprint.add_url_rule(rule="/sms/<key>", view_func=sms_func, methods=['get', 'post']) """保存或者获取文件(mongodb存储)""" user_blueprint.add_url_rule(rule="/file/<action>/<table_name>", view_func=file_func, methods=['post', 'get']) """通用页面视图""" user_blueprint.add_url_rule(rule="/html/<html_name>", view_func=common_view_func, methods=['post', 'get']) """获取用户授权页面""" user_blueprint.add_url_rule(rule="/auth_demo/<key>", view_func=auth_demo, methods=['post', 'get']) """页面授权示范页""" user_blueprint.add_url_rule(rule="/page_auth_demo", view_func=page_auth_demo, methods=['post', 'get']) """生产环境,获取用户code""" user_blueprint.add_url_rule(rule="/get_code_and_redirect", view_func=get_code_and_redirect, methods=['post', 'get']) """生产环境,获取用户信息""" user_blueprint.add_url_rule(rule="/draw_user_info", view_func=draw_user_info, methods=['post', 'get']) """生产环境,获取JS-SDK初始化用的脚本"""
# -*- coding: utf-8 -*- """ .. module:: pravis.simple :synopsis: Blueprint setup for Simple module """ from flask.blueprints import Blueprint from pravis.simple.views import LoginView blueprint = Blueprint('simple', __name__, url_prefix='/simple/') blueprint.add_url_rule('/', view_func=LoginView.as_view('simple'))
class Module(metaclass=ModuleMeta): id: str = None endpoint: str = None label: str = None managed_class: type = None list_view = None list_view_columns: List[Dict[str, Any]] = [] single_view = None components: Tuple = () # class based views. If not provided will be automaticaly created from # EntityView etc defined below base_template = "base.html" view_cls = EntityView edit_cls = EntityEdit create_cls = EntityCreate delete_cls = EntityDelete json_search_cls = JSONWhooshSearch JSON2_SEARCH_LENGTH = 50 # form_class. Used when view_cls/edit_cls are not provided edit_form_class = None view_form_class = None # by default, same as edit_form_class url = None name = None view_new_save_and_add = False # show 'save and add new' button in /new form static_folder = None view_template = None view_options = None related_views: List["RelatedView"] = [] blueprint = None search_criterions = ( search.TextSearchCriterion("name", attributes=("name", "nom")), ) # used mostly to change datatable search_label tableview_options = {} # type: ignore _urls: List[Tuple] = [] def __init__(self) -> None: # If endpoint name is not provided, get it from the class name if self.endpoint is None: class_name = self.__class__.__name__ if class_name.endswith("Module"): class_name = class_name[0 : -len("Module")] self.endpoint = class_name.lower() if self.label is None: self.label = labelize(self.endpoint) if self.id is None: self.id = self.managed_class.__name__.lower() # If name is not provided, use capitalized endpoint name if self.name is None: self.name = self._prettify_name(self.__class__.__name__) if self.view_options is None: self.view_options = {} # self.single_view = make_single_view(self.edit_form_class, # view_template=self.view_template, # **self.view_options) if self.view_form_class is None: self.view_form_class = self.edit_form_class # init class based views kw = { "Model": self.managed_class, "pk": "entity_id", "module": self, "base_template": self.base_template, } self._setup_view( "/<int:entity_id>", "entity_view", self.view_cls, Form=self.view_form_class, **kw, ) view_endpoint = self.endpoint + ".entity_view" self._setup_view( "/<int:entity_id>/edit", "entity_edit", self.edit_cls, Form=self.edit_form_class, view_endpoint=view_endpoint, **kw, ) self._setup_view( "/new", "entity_new", self.create_cls, Form=self.edit_form_class, chain_create_allowed=self.view_new_save_and_add, view_endpoint=view_endpoint, **kw, ) self._setup_view( "/<int:entity_id>/delete", "entity_delete", self.delete_cls, Form=self.edit_form_class, view_endpoint=view_endpoint, **kw, ) self._setup_view("/json", "list_json", ListJson, module=self) self._setup_view( "/json_search", "json_search", self.json_search_cls, Model=self.managed_class, ) self.init_related_views() # copy criterions instances; without that they may be shared by # subclasses self.search_criterions = copy.deepcopy(self.__class__.search_criterions) for sc in self.search_criterions: sc.model = self.managed_class self.__components = {} for component in self.components: component.init_module(self) self.__components[component.name] = component def get_component(self, name): return self.__components.get(name) def _setup_view(self, url: str, attr: str, cls: Any, *args, **kwargs) -> None: """Register class based views.""" view = cls.as_view(attr, *args, **kwargs) setattr(self, attr, view) self._urls.append((url, attr, view.methods)) def init_related_views(self) -> None: related_views = [] for view in self.related_views: if not isinstance(view, RelatedView): view = DefaultRelatedView(*view) related_views.append(view) self.related_views = related_views @property def action_category(self) -> str: return f"module:{self.endpoint}" def get_grouped_actions(self) -> OrderedDict: items = actions.for_category(self.action_category) groups = OrderedDict() for action in items: groups.setdefault(action.group, []).append(action) return groups def register_actions(self) -> None: ACTIONS = [ ModuleAction( self, "entity", "create", title=_l("Create New"), icon=FAIcon("plus"), endpoint=Endpoint(self.endpoint + ".entity_new"), button="default", ) ] for component in self.components: ACTIONS.extend(component.get_actions()) actions.register(*ACTIONS) def create_blueprint(self, crud_app: "CRUDApp") -> Blueprint: """Create a Flask blueprint for this module.""" # Store admin instance self.crud_app = crud_app self.app = crud_app.app # If url is not provided, generate it from endpoint name if self.url is None: self.url = f"{self.crud_app.url}/{self.endpoint}" else: if not self.url.startswith("/"): self.url = f"{self.crud_app.url}/{self.url}" # Create blueprint and register rules self.blueprint = Blueprint(self.endpoint, __name__, url_prefix=self.url) for url, name, methods in self._urls: self.blueprint.add_url_rule(url, name, getattr(self, name), methods=methods) # run default_view decorator default_view(self.blueprint, self.managed_class, id_attr="entity_id")( self.entity_view ) # delay registration of our breadcrumbs to when registered on app; thus # 'parents' blueprint can register theirs befores ours self.blueprint.record_once(self._setup_breadcrumb_preprocessors) return self.blueprint def _setup_breadcrumb_preprocessors(self, state: BlueprintSetupState) -> None: self.blueprint.url_value_preprocessor(self._add_breadcrumb) def _add_breadcrumb(self, endpoint: str, values: Dict[Any, Any]) -> None: g.breadcrumb.append( BreadcrumbItem(label=self.label, url=Endpoint(".list_view")) ) @property def base_query(self) -> EntityQuery: """Return a query instance for :attr:`managed_class`.""" return self.managed_class.query @property def read_query(self): """Return a query instance for :attr:`managed_class` filtering on `READ` permission.""" return self.base_query.with_permission(READ) @property def listing_query(self) -> EntityQuery: """Like `read_query`, but can be made lightweight with only columns and joins of interest. `read_query` can be used with exports for example, with lot more columns (generallly it means more joins). """ return self.base_query.with_permission(READ) def query(self, request: Request): """Return filtered query based on request args.""" args = request.args search = args.get("sSearch", "").replace("%", "").lower() query = self.read_query.distinct() for crit in self.search_criterions: query = crit.filter(query, self, request, search) return query def list_query(self, request: Request) -> EntityQuery: """Return a filtered query based on request args, for listings. Like `query`, but subclasses can modify it to remove costly joined loads for example. """ args = request.args search = args.get("sSearch", "").replace("%", "").lower() query = self.listing_query query = query.distinct() for crit in self.search_criterions: query = crit.filter(query, self, request, search) return query def ordered_query( self, request: Request, query: Optional[EntityQuery] = None ) -> EntityQuery: """Order query according to request args. If query is None, the query is generated according to request args with self.query(request) """ if query is None: query = self.query(request) engine = query.session.get_bind(self.managed_class.__mapper__) args = request.args sort_col = int(args.get("iSortCol_0", 1)) sort_dir = args.get("sSortDir_0", "asc") sort_col_def = self.list_view_columns[sort_col] sort_col_name = sort_col_def["name"] rel_sort_names = sort_col_def.get("sort_on", (sort_col_name,)) sort_cols = [] for rel_col in rel_sort_names: sort_col = getattr(self.managed_class, rel_col) if hasattr(sort_col, "property") and isinstance( sort_col.property, orm.properties.RelationshipProperty ): # this is a related model: find attribute to filter on query = query.outerjoin(sort_col_name, aliased=True) rel_model = sort_col.property.mapper.class_ default_sort_name = "name" if issubclass(rel_model, BaseVocabulary): default_sort_name = "label" rel_sort_name = sort_col_def.get("relationship_sort_on", None) if rel_sort_name is None: rel_sort_name = sort_col_def.get("sort_on", default_sort_name) sort_col = getattr(rel_model, rel_sort_name, None) # XXX: Big hack, date are sorted in reverse order by default if isinstance(sort_col, (Date, DateTime)): sort_dir = "asc" if sort_dir == "desc" else "desc" elif ( isinstance(sort_col, sa.types.String) or hasattr(sort_col, "property") and isinstance(sort_col.property.columns[0].type, sa.types.String) ): sort_col = func.lower(sort_col) if sort_col is not None: try: direction = desc if sort_dir == "desc" else asc sort_col = direction(sort_col) except Exception: # FIXME pass # sqlite does not support 'NULLS FIRST|LAST' in ORDER BY # clauses if engine.name != "sqlite": nullsorder = nullslast if sort_dir == "desc" else nullsfirst try: sort_col = nullsorder(sort_col) except Exception: # FIXME pass sort_cols.append(sort_col) if sort_cols: try: query = query.order_by(*sort_cols) except Exception: # FIXME pass query.reset_joinpoint() return query # # Exposed views # @expose("/") def list_view(self) -> str: actions.context["module"] = self table_view = AjaxMainTableView( name=self.managed_class.__name__.lower(), columns=self.list_view_columns, ajax_source=url_for(".list_json"), search_criterions=self.search_criterions, options=self.tableview_options, ) rendered_table = table_view.render() ctx = { "rendered_table": rendered_table, "module": self, "base_template": self.base_template, } return render_template("default/list_view.html", **ctx) def list_json2_query_all(self, q): """Implements the search query for the list_json2 endpoint. May be re-defined by a Module subclass in order to customize the search results. - Return: a list of results (not json) with an 'id' and a 'text' (that will be displayed in the select2). """ cls = self.managed_class query = db.session.query(cls.id, cls.name) query = ( query.filter(cls.name.ilike("%" + q + "%")) .distinct() .order_by(cls.name) .limit(self.JSON2_SEARCH_LENGTH) ) results = query.all() results = [{"id": r[0], "text": r[1]} for r in results] return results @expose("/json2") def list_json2(self): """Other JSON endpoint, this time used for filling select boxes dynamically. You can write your own search method in list_json2_query_all, that returns a list of results (not json). """ args = request.args q = args.get("q", "").replace("%", " ") if not q or len(q) < 2: raise BadRequest() results = self.list_json2_query_all(q) return {"results": results} # # Utils # def is_current(self): return request.path.startswith(self.url) @staticmethod def _prettify_name(name: str) -> str: """Prettify class name by splitting name by capital characters. So, 'MySuperClass' will look like 'My Super Class' `name` String to prettify """ return re.sub(r"(?<=.)([A-Z])", r" \1", name)
class LoginView(MethodView): def get(self): return redirect(url_for('home.index')) def post(self): form = LoginForm() if form.validate_on_submit(): login_user(form.user) return redirect(url_for('home.index')) class RegisterView(MethodView): def get(self): return redirect(url_for('home.index')) def post(self): form = RegisterForm() if form.validate_on_submit(): user = form.save() login_user(user) return redirect(url_for('home.index')) bp.add_url_rule('/', view_func=HomeView.as_view('index')) bp.add_url_rule('create/topic', view_func=CreateTopicView.as_view('create_topic')) bp.add_url_rule('create/comment', view_func=CreateCommentView.as_view('create_comment')) bp.add_url_rule('login', view_func=LoginView.as_view('login')) bp.add_url_rule('register', view_func=RegisterView.as_view('register'))
"""用于闪卡训练的视图函数""" def hello() -> str: """hello world""" return "hello user" def syllabus_view_func() -> str: """ 课程表 :return: """ def page_flash_images(): """ 分页显示闪卡 :return: """ """集中注册函数""" """hello""" user_blueprint.add_url_rule(rule="/hello", view_func=hello, methods=['get', 'post']) """课程表""" user_blueprint.add_url_rule(rule="/syllabus", view_func=syllabus_view_func, methods=['post', 'get'])
posts = Post.objects.all() return render_template('index.html', posts=posts) class CreateView(MethodView): def post(self): title = request.form.get('title') content = request.form.get('content') post = Post(title=title, content=content) post.save() return jsonify(ok=0) class LoginView(MethodView): def get(self): if current_user.is_authenticated(): return redirect(url_for('index')) return render_template('login.html') class LogoutView(MethodView): def get(self): logout_user() return redirect(url_for('index')) bp.add_url_rule('/', view_func=HomeView.as_view('index')) bp.add_url_rule('create', view_func=CreateView.as_view('create')) bp.add_url_rule('login', view_func=LogoutView.as_view('login')) bp.add_url_rule('logout', view_func=LogoutView.as_view('logout'))
# coding=utf-8 from flask import request from flask.views import MethodView from flask.blueprints import Blueprint from flask_mako import render_template from firefly.models.consts import KEYBOARD_URL_MAPS bp = Blueprint('keyboard', __name__, url_prefix='/keyboard') class KeyboardView(MethodView): def get(self): url = request.args.get('url', '') url_pattern = url.rsplit('/', 1)[0] keyboards = KEYBOARD_URL_MAPS['default'] if url_pattern in KEYBOARD_URL_MAPS: keyboards += KEYBOARD_URL_MAPS[url_pattern] return render_template('widgets/keyboard.html', keyboards=keyboards) bp.add_url_rule('/', view_func=KeyboardView.as_view('keyboard'))
def post(self): """ Login user """ user = AuthModel.auth(request.form.get('username'), request.form.get('password')) if user: session_id = AuthModel.login(user) resp = jsonify({'user': user}) resp.set_cookie(SESSION_NAME, session_id) return resp else: raise CannotLogin( 'Cannot login user. Please verify your information.') def delete(self): """ Logout user """ resp = Response() session_id = request.cookies.get(SESSION_NAME) if session_id: Db.sessions.remove({'_id': session_id}) resp.set_cookie(SESSION_NAME, '', expires=0) return resp auth_blueprint = Blueprint('auth_blueprint', __name__) auth_view = AuthResource.as_view('auth_view') auth_blueprint.add_url_rule('/auth', 'auth', auth_view)
"form": form } return context def get(self, id): context = self.get_context(id) Post.objects(id=id).update_one(inc__views=1) return render_template('posts/detail.html', **context) def post(self, id): if not current_user.is_authenticated(): abort(403) context = self.get_context(id) form = context.get('form') if form.validate(): comment = Comment() form.populate_obj(comment) comment.author = User.objects.get_or_404(id=current_user.id) comment.save() post = context.get('post') post.comments.append(comment) post.save() return redirect(url_for('post.detail', id=id)) return render_template('posts/detail.html', **context) bp.add_url_rule('/<int:id>/', view_func=DetailView.as_view('detail'))
as_attachment=True, mimetype=mime_type)) return resp else: mes['message'] = '无效的id' else: mes['message'] = "不支持的操作" return json.dumps(mes) else: return redirect(url_for("web_blueprint.login_func")) """集中注册函数""" """注册""" web_blueprint.add_url_rule(rule="/login", view_func=login_func, methods=['get', 'post']) """登出""" web_blueprint.add_url_rule(rule="/logout", view_func=logout_func, methods=['get', 'post']) """对公司的简历收藏夹的操作""" web_blueprint.add_url_rule(rule="/favorite/<key>", view_func=resume_favorite_func, methods=['get', 'post']) """分页查询司机信息""" web_blueprint.add_url_rule(rule="/drivers", view_func=driver_page_func, methods=['get', 'post']) """公司客户查看司机简历""" web_blueprint.add_url_rule(rule="/company/resume",
try: result = SmAgentDrawingService.query_withdraw_all( AgentID=self.u_id, **self.unpack_para(request.json)) return jsonify(SUCCESS(result)) if result else jsonify( SUCCESS({ 'total': 0, 'rows': [] })) except Exception as e: current_app.logger.error(e) return jsonify(SUCCESS({'total': 0, 'rows': []})) # 充值创建 fund_bp.add_url_rule('/recharge', methods=['POST'], view_func=RechargeFund.as_view('fund_recharge')) # 转账流水 fund_bp.add_url_rule( '/recharge_record', methods=['POST'], view_func=RechargeRecordFund.as_view('fund_recharge_record')) # 提款 fund_bp.add_url_rule('/withdraw', methods=['POST'], view_func=WithdrawFund.as_view('fund_withdraw')) # 查询会员提款 fund_bp.add_url_rule( '/withdraw_record', methods=['POST'], view_func=MemberWithdrawRecordFund.as_view('fund_withdraw_record_member'))
# coding=utf-8 from flask.blueprints import Blueprint from .category import category_view bp = Blueprint("api", __name__, url_prefix="/api") bp.add_url_rule('/category/', defaults={'name': None}, view_func=category_view) bp.add_url_rule('/category/<string:name>', view_func=category_view)
from flask.blueprints import Blueprint from trading_system.api.auth_middleware import auth_middleware from .controllers import TicketsController, TicketController tickets = Blueprint('tickets', __name__, url_prefix='/tickets') tickets.before_request(auth_middleware) tickets.add_url_rule('/', view_func=TicketsController.as_view('tickets_view'), methods=['GET', 'POST']) tickets.add_url_rule('/<int:ticket_id>', view_func=TicketController.as_view('ticket_view'), methods=['GET', 'DELETE'])
try: for f in ['discount_return_time', 'discount_return_person_id', 'discount_return_remark', 'actual_proxy_charge']: setattr(header, f, _g(f)) header.is_discount_return = 1 DBSession.commit() return jsonify({'code' : 0 , 'msg' : MSG_SAVE_SUCC}) except: DBSession.rollback() _error(traceback.print_exc()) return jsonify({'code' : 1 , 'msg' : MSG_SERVER_ERROR}) def ajax_get_discount(self): id = _g('id') if not id: return jsonify({'code' : 1 , 'msg' : MSG_NO_ID_SUPPLIED}) header = DBSession.query(OrderHeader).get(id) if not header: return jsonify({'code' : 1 , 'msg' : MSG_RECORD_NOT_EXIST}) return jsonify({'code' : 0 , 'data' : { 'ref_no' : header.ref_no, 'actual_proxy_charge' : header.actual_proxy_charge, 'discount_return_time' : header.discount_return_time, 'discount_return_person_id' : header.discount_return_person_id, 'discount_return_remark' : header.discount_return_remark, }}) bpFin.add_url_rule('/', view_func = FinView.as_view('view'), defaults = {'action':'index'}) bpFin.add_url_rule('/<action>', view_func = FinView.as_view('view'))
""" Resource for process """ def get(self): processes = ProcessModel.query(spec={}) return {'processes': [p for p in processes]} def post(self): process = request.form.to_dict() process_id = ProcessModel.create(process) return {'process': {'_id': process_id}} def delete(self, _id): ProcessModel.delete(_id) return {'process': {}} def patch(self, _id): process = request.form.to_dict() # Get id of process will be updated _id = process['_id'] # Delete _id in process for update process without touching _id del process['_id'] process = ProcessModel.modify(_id, process) return {'process': process} process_blueprint = Blueprint('process_blueprint', __name__) process_view = ProcessResource.as_view('process_view') process_blueprint.add_url_rule('/processes', 'processes', process_view) process_blueprint.add_url_rule('/processes/<string:_id>', 'process', process_view)
if obj.status == 1: # if the record is approved,update the real qty/weight/area t.qty -= qty - d.qty t.weight -= weight - d.weight t.area -= area - d.area t.exp_qty -= qty - d.qty t.exp_weight -= weight - d.weight t.exp_area -= area - d.area d.qty = qty d.weight = weight d.area = area obj.qty = total_qty obj.area = total_area obj.weight = total_weight DBSession.commit() flash(MSG_UPDATE_SUCC, MESSAGE_INFO) return redirect(url_for(".view", action = "out_note_review", id = obj.id)) def _p(self, v, fun, default = 0): try: return fun(v) except: return default bpInventory.add_url_rule('/', view_func = InventoryView.as_view('view'), defaults = {'action':'index'}) bpInventory.add_url_rule('/<action>', view_func = InventoryView.as_view('view'))