from lin.redprint import Redprint from app.libs.utils import paginate from flask import request, jsonify from app.models.product import Product from app.models.product_image import ProductImage from app.models.product_property import ProductProperty from app.validators.v1.product_forms import ProductIdAndCount product_api = Redprint('product') @product_api.route('/<int:pid>', methods=['GET']) def get(pid): model = Product.get_model(pid, throw=True) desc_imgs = ProductImage.get_by_product_id_with_image(pid) if desc_imgs: model.desc_imgs = desc_imgs model._fields.append('desc_imgs') properties = ProductProperty.get_by_product_id(pid) if properties: model.properties = properties model._fields.append('properties') model.hide('img_id', 'delete_time', 'category_id', 'category') return jsonify(model) @product_api.route('/<int:pid>/for/pre_order', methods=['GET']) def get_for_pre_order(pid): model = Product.get_model_with_img(pid, throw=True)
""" a standard CRUD template of todoList 通过 事件 来实现一套标准的 CRUD 功能,供学习 :copyright: © 2019 by the Lin team. :license: MIT, see LICENSE for more details. """ from flask import jsonify from lin import route_meta, group_required, login_required from lin.exception import Success from lin.redprint import Redprint from app.models.todoList import TodoList from app.validators.forms import TodoListSearchForm, CreateOrUpdateTodoListForm todoList_api = Redprint('todoList') # 这与真实的情况是一致的,因为一般的情况下,重要的接口需要被保护,重要的消息才需要推送 @todoList_api.route('/<bid>', methods=['GET']) def get_todoList(bid): todoList = TodoList.get_detail(bid) return jsonify(todoList) @todoList_api.route('', methods=['GET']) def get_todoLists(): todoLists = TodoList.get_all() return jsonify(todoLists) @todoList_api.route('/search', methods=['GET'])
from flask import request from lin import db from lin.exception import Success, Failed from lin.jwt import identity from lin.redprint import Redprint from werkzeug.datastructures import ImmutableMultiDict from flask_jwt_extended import ( JWTManager, jwt_required, create_access_token, get_jwt_identity, create_refresh_token) from app.models.user import UserInfo from app.validators.user import Register, Login api_user = Redprint("user") @api_user.route("/register", methods=["POST"]) def register(): data = eval(str(request.data, encoding='utf-8')) form = Register(ImmutableMultiDict(data)) if form.validate(): # 数据校验 UserInfo.register_user(form) return Success(msg="注册成功") else: return form.errors @api_user.route("/login", methods=['POST'])
from app.libs.utils import get_page_from_query, json_res, paginate from app.validators.forms import (DispatchAuth, DispatchAuths, NewGroup, RemoveAuths, ResetPasswordForm, UpdateGroup, UpdateUserInfoForm) from flask import jsonify, request from lin import db from lin.core import (find_auth_module, find_user, get_ep_infos, manager, route_meta) from lin.db import get_total_nums from lin.enums import UserActive, UserAdmin from lin.exception import Forbidden, NotFound, ParameterException, Success from lin.jwt import admin_required from lin.log import Logger from lin.redprint import Redprint admin_api = Redprint('admin') @admin_api.route('/authority', methods=['GET']) @route_meta(auth='查询所有可分配的权限', module='管理员', mount=True) @admin_required def authority(): return jsonify(get_ep_infos()) @admin_api.route('/users', methods=['GET']) @route_meta(auth='查询所有用户', module='管理员', mount=True) @admin_required def get_admin_users(): start, count = paginate() group_id = request.args.get('group_id')
from lin.exception import Success from lin.redprint import Redprint from app.libs.jwt_api import get_current_member, member_login_required from app.models.like import Like from app.validators.v1.like_forms import LikeForm like_api = Redprint('like') @like_api.route('', methods=['POST']) @member_login_required def like(): form = LikeForm().validate_for_api() member_id = get_current_member().id Like.like(form.type.data, form.art_id.data, member_id) return Success(msg='点赞成功') @like_api.route('/cancel', methods=['POST']) @member_login_required def unlike(): form = LikeForm().validate_for_api() member_id = get_current_member().id Like.unlike(form.type.data, form.art_id.data, member_id) return Success(msg='取消点赞成功')
# -*- encoding: utf-8 -*- """ @File : product.py @Time : 2020/4/25 10:09 @Author : Tianjin @Email : [email protected] @Software: PyCharm """ from app.models.product import ProductModel from lin.redprint import Redprint api_product = Redprint('product')
# -*- encoding: utf-8 -*- """ @File : wechat.py @Time : 2020/3/13 10:08 @Author : Tianjin @Email : [email protected] @Software: PyCharm """ from flask import request, jsonify from lin import admin_required from lin.redprint import Redprint from app.models.ctivity import Ctivity back = Redprint("wechat") @back.route("/manage", methods=["POST", "DELETE", "PUT", "GET"]) @admin_required def activity(): if request.method == "POST": result = str(request.data, encoding='utf-8') if result.pop("num"): Ctivity.add_ctivity(**result) if request.method == "DELETE": return jsonify(request.data) if request.method == "PUT": return jsonify(request.data)
# -*- encoding: utf-8 -*- """ @File : collect.py @Time : 2020/4/25 10:07 @Author : Tianjin @Email : [email protected] @Software: PyCharm """ from app.models.collect import Collect from lin.redprint import Redprint api_collect = Redprint('collect')
""" Likui """ # 产品线接口 import json from app.libs.error_code import Success, Failed from app.libs.date_encoder import DateEncoder from app.models.product_line import ProductLine from lin.jwt import login_required from lin.redprint import Redprint from flask import request product_line_api = Redprint('product_line') # 查询全部产品线列表 @product_line_api.route('/get_all', methods=['POST','GET']) @login_required def get_all(): # 获取form参数 system = request.form.get("data") print(system) system_obj = None if(system != None or system != ""): # 转换成dict格式 system_obj = json.loads(system) # 调用业务代码 product_line = ProductLine.get_all(system_obj) # 返回结果 return Success(msg='成功', data=product_line)
from flask import jsonify from lin import route_meta, group_required from lin.exception import Success from lin.redprint import Redprint from app.models.scheduler import Scheduler from app.validators.SchedulerForm import SchedulerForm, SchedulerSearchForm, SchedulerOperateForm, SchedulerEditForm scheduler_api = Redprint('scheduler') @scheduler_api.route('/add', methods=['POST']) @route_meta('新增定时任务', module='定时任务') @group_required def add_job(): form = SchedulerForm().validate_for_api() scheduler = Scheduler() scheduler.new_job(form.project.data, form.user.data, form.sendEmail.data, form.copyPerson.data, form.cron.data, form.emailStrategy.data) return Success('新增定时任务成功') @scheduler_api.route('/search', methods=['GET']) @route_meta('定时任务列表', module='定时任务') @group_required def search_jobs(): form = SchedulerSearchForm().validate_for_api() jobs = Scheduler.search_jobs(form.project.data, form.user.data, form.page.data, form.count.data)
""" :copyright: © 2019 by the Lin team. :license: MIT, see LICENSE for more details. """ from flask import request, jsonify, json from lin import login_required, group_required, route_meta from app.libs.error_code import Success, Failed from lin.redprint import Redprint from app.models.sys_setting import SysSetting sys_setting_api = Redprint('sys_setting') #新增系统配置项 @sys_setting_api.route('/create', methods=['POST']) def create_sys_setting(): data = request.form.get("data") data_Obj = None if (data != None or data != ""): data_Obj = json.loads(data) SysSetting.create_sys_setting(data_Obj) return Success(msg='添加系统配置成功') #查询全部系统配置列表 @sys_setting_api.route('/get_sys_settings', methods=['POST']) def get_sys_settings(): # 获取form参数 system = request.form.get("data") system_Obj = None if (system != None or system != ""):
from flask import jsonify # from lin import route_meta, group_required, login_required # from lin.exception import Success from lin.redprint import Redprint from lin.util import paginate from app.models.article import Article article_api = Redprint('article') @article_api.route('/', methods=['GET']) def get_all(): start, count = paginate() res = Article.get_all(start, count) for val in res: try: val.logo = "https://qnhszm.obs.cn-north-1.myhuaweicloud.com/images/" + val.logo.split( '/')[-1] val.img1 = "https://qnhszm.obs.cn-north-1.myhuaweicloud.com/images/" + val.img1.split( '/')[-1] val.img2 = "https://qnhszm.obs.cn-north-1.myhuaweicloud.com/images/" + val.img2.split( '/')[-1] val.img3 = "https://qnhszm.obs.cn-north-1.myhuaweicloud.com/images/" + val.img3.split( '/')[-1] val.img4 = "https://qnhszm.obs.cn-north-1.myhuaweicloud.com/images/" + val.img4.split( '/')[-1] val.img5 = "https://qnhszm.obs.cn-north-1.myhuaweicloud.com/images/" + val.img5.split( '/')[-1] except: continue
from flask import g, jsonify, request, current_app from lin.exception import Success from app.libs.token_auth import auth from lin.redprint import Redprint from app.models.gift import Gift from app.models.wish import Wish from app.view_models.trade import MyTrade gift_api = Redprint('gift') @gift_api.route('/save/<int:bid>', methods=['GET']) @auth.login_required def save_of_gift(bid): uid = g.user.id gift = Gift(bid=bid, uid=uid) gift.save_of_gift() return Success() @gift_api.route('/cancel/<int:bid>', methods=['DELETE']) @auth.login_required def cancel(bid): uid = g.user.id gift = Gift(bid=bid, uid=uid) gift.cancel() return Success()
""" :copyright: © 2020 by the Lin team. :license: MIT, see LICENSE for more details. """ from flask import request from lin.jwt import login_required from lin.redprint import Redprint from app.extension.file.local_uploader import LocalUploader file_api = Redprint("file") @file_api.route("", methods=["POST"]) @login_required def post_file(): files = request.files uploader = LocalUploader(files) ret = uploader.upload() return ret
""" :copyright: © 2019 by the Lin team. :license: MIT, see LICENSE for more details. """ from flask import request, jsonify from lin import login_required from lin.redprint import Redprint from app.extensions.file.local_uploader import LocalUploader file_api = Redprint('file') @file_api.route('', methods=['POST']) @login_required def post_file(): files = request.files uploader = LocalUploader(files) ret = uploader.upload() return jsonify(ret)
# -*- coding: utf-8 -*- """ Created by Wesley on 2020/3/26. """ from flask import jsonify from lin.redprint import Redprint from app.models.category import Category from app.validators.forms import GetCategoriesForm category_api = Redprint('categorys') @category_api.route('') def get_categories(): """获取所有分类数据 :params <int:type>: 1-短句;2-广告 """ form = GetCategoriesForm().validate_for_api() categories = Category.query.filter_by(delete_time=None, type=form.type.data)\ .order_by(Category._create_time.desc()).all() returned = [item.content for item in categories] returned = ['全部'] + returned return jsonify(returned)
""" a standard CRUD template of book 通过 图书 来实现一套标准的 CRUD 功能,供学习 :copyright: © 2019 by the Lin team. :license: MIT, see LICENSE for more details. """ from flask import jsonify from lin import route_meta, group_required, login_required from lin.exception import Success from lin.redprint import Redprint from app.models.book import Book from app.validators.forms import BookSearchForm, CreateOrUpdateBookForm book_api = Redprint('book') # 这与真实的情况是一致的,因为一般的情况下,重要的接口需要被保护,重要的消息才需要推送 # @book_api.route('/<bid>', methods=['GET']) # @login_required # def get_book(bid): # book = Book.get_detail(bid) # return jsonify(book) # # # @book_api.route('', methods=['GET']) # @login_required # def get_books(): # books = Book.get_all() # return jsonify(books) # #
from flask import jsonify from lin.redprint import Redprint from app.libs.jwt_api import member_login_required, get_current_member from app.libs.utils import offset_limit from app.models.classic import Classic from app.models.like import Like classic_api = Redprint('classic') @classic_api.route('/latest', methods=['GET']) # # @member_login_required def get_latest(): classic = Classic.get_latest() # classic_with_like_status(classic) return jsonify(classic) @classic_api.route('/<int:index>/next', methods=['GET']) # @member_login_required def get_next(index): classic = Classic.get_next(index) # classic_with_like_status(classic) return jsonify(classic) @classic_api.route('/<int:index>/previous', methods=['GET']) # @member_login_required def get_previous(index): classic = Classic.get_previous(index)
""" :copyright: © 2019 by the Lin team. :license: MIT, see LICENSE for more details. """ from time import sleep from flask_mail import Message from lin.exception import Success from lin.redprint import Redprint from flask import jsonify, request from lin.jwt import group_required from lin.core import route_meta from app.libs.init import mongo, mail test_api = Redprint('test') @test_api.route('', methods=['GET']) def slogan(): return """<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; } body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px;} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.6em; font-size: 42px }</style><div style="padding: 24px 48px;"><p> Lin <br/><span style="font-size:30px">遇事不决 可问春风</span></p></div> """ @test_api.route('/info', methods=['GET']) @route_meta(auth='查看lin的信息', module='信息') # @Logger(template='{user.nickname}浏览了信息') # 记录日志 @group_required
@Author : Tianjin @Email : [email protected] @Software: PyCharm """ from flask import request from lin.exception import ParameterException from werkzeug.datastructures import ImmutableMultiDict from app.exception.exception import Success, Result from app.models.cart import ShoppingCart from lin.redprint import Redprint from app.validators.cart import Append_Cart api_cart = Redprint('cart') @api_cart.route("/append", methods=["POST"]) def append_cart(): data = eval(str(request.data, encoding='utf-8')) form = Append_Cart(ImmutableMultiDict(data)) if form.validate(): ShoppingCart.append_cart(form) return Success(msg="加入购物成功") else: return ParameterException(msg=form.errors) @api_cart.route("/remove", methods=["DELETE"]) def remove_cart():
from flask import jsonify, current_app from lin import route_meta, group_required from lin.exception import Success from lin.redprint import Redprint from app.models.mock import Mock from app.validators.MockForm import MockForm, MockSearchForm mock_api = Redprint('mock') @mock_api.route('', methods=['POST']) @route_meta('mock', module='mock管理') @group_required def add_mock(): form = MockForm().validate_for_api() mock = Mock(form.method.data, form.url.data, form.requestHeader.data, form.requestBody.data, form.responseHeader.data, form.responseBody.data, form.statusCode.data, form.msg.data) mock.new_mock() return Success(msg='新增mock成功') @mock_api.route('/<mid>', methods=['PUT']) @route_meta('mock', module='mock管理') @group_required def edit_mock(mid): form = MockForm().validate_for_api() mock = Mock(form.method.data, form.url.data, form.requestHeader.data, form.requestBody.data, form.responseHeader.data, form.responseBody.data, form.statusCode.data, form.msg.data) mock.mid = mid
from flask import request, jsonify from lin import route_meta, group_required from lin.exception import Success from lin.redprint import Redprint from app.libs.utils import paginate from app.models.banner_item import BannerItem from app.validators.cms.banner_item_forms import BannerItemType, BannerItemContent banner_item_api = Redprint('banner-item') @banner_item_api.route('/<int:bid>', methods=['GET']) @route_meta(auth='查询指定横幅子项', module='横幅子项') @group_required def get(bid): model = BannerItem.get_model_with_img(bid, throw=True) return jsonify(model) @banner_item_api.route('/types', methods=['GET']) @route_meta(auth='查询横幅子项的所有类型', module='横幅子项') @group_required def get_types(): types = BannerItem.get_all_type_desc() res = {k: v for k, v in types.items()} return res @banner_item_api.route('/paginate', methods=['GET']) @route_meta(auth='分页查询所有横幅子项', module='横幅子项')
from flask import jsonify from lin import route_meta, group_required, login_required from lin.exception import Success from lin.redprint import Redprint from app.validators.forms import ThirdClientForm, WxClientForm from app.models.third_client.third_bind import ThirdBind member_api = Redprint('member') @member_api.route('/check-reg', methods=['POST']) def checkReg(): form = ThirdClientForm().validate_for_api() resp = ThirdBind.wx_check_reg(form) return jsonify(resp) @member_api.route('/login', methods=['POST']) def login(): form = WxClientForm().validate_for_api() resp = ThirdBind.wx_register(form) return jsonify(resp)
from datetime import datetime from flask import request, jsonify from lin import route_meta, group_required, login_required from lin.exception import Success from lin.redprint import Redprint from app.libs.utils import paginate from app.models.order import Order from app.services.order import OrderService from app.validators.cms.order_forms import DeliveryForm from app.validators.common import DatetimeSection order_api = Redprint('order') @order_api.route('/get/<int:oid>', methods=['GET']) @route_meta(auth='查询指定订单', module='订单') # @group_required def get(oid): model = Order.get_model(oid, throw=True) model.hide('deadline_str', 'order_status') return jsonify(model) @order_api.route('/paginate', methods=['GET']) @route_meta(auth='分页查询所有订单', module='订单') @group_required def get_paginate(): form = DatetimeSection().validate_for_api() date_start = form.date_start.data
# -*- coding: utf-8 -*- """ Created by Wesley on 2020/3/26. """ from flask import current_app, jsonify from lin.redprint import Redprint from sqlalchemy import func from app.libs.utils import json_paginate from app.models.ad import Ad from app.models.category import Category from app.validators.forms import GetAdsForm ad_api = Redprint('ads') @ad_api.route('') def get_ads(): form = GetAdsForm().validate_for_api() per_page = current_app.config['COUNT_DEFAULT'] if form.category.data == '全部': ads = Ad.query.filter_by(delete_time=None).order_by( Ad._create_time.desc()).paginate(form.page.data, per_page) else: category = Category.query.filter_by( content=form.category.data).first_or_404() ads = Ad.query.with_parent(category).filter_by( delete_time=None).order_by(Ad._create_time.desc()).paginate( form.page.data, per_page) return jsonify(json_paginate(ads))
from lin import permission_meta from lin.apidoc import DocResponse, api from lin.db import db from lin.jwt import group_required from lin.logger import Log from lin.redprint import Redprint from sqlalchemy import text from app.validator.schema import ( AuthorizationSchema, LogPageSchema, LogQuerySearchSchema, UsernameListSchema, ) log_api = Redprint("log") @log_api.route("") @log_api.route("/search") @permission_meta(name="查询日志", module="日志") # @group_required @api.validate( headers=AuthorizationSchema, query=LogQuerySearchSchema, resp=DocResponse(r=LogPageSchema), before=LogQuerySearchSchema.offset_handler, tags=["日志"], ) def get_logs(): """
""" Created by Wesley on 2020/3/26. """ from flask import jsonify from flask_jwt_extended import get_current_user from lin import login_required from lin.exception import ParameterException, Success from lin.redprint import Redprint from sqlalchemy import func from app.libs.utils import json_paginate from app.models.ad import Ad from app.models.category import Category from app.models.quota import Quota from app.validators.forms import GetQuotasForm quota_api = Redprint('quotas') @quota_api.route('') # @login_required def get_quotas(): """ 获取短句,9个短句+1个广告 :return: """ form = GetQuotasForm().validate_for_api() per_page = 9 # 随机获取短句 if form.order_by.data == 'random': if form.category.data != '全部':
from flask import jsonify, request import os from lin.exception import Success, ParameterException, Failed from .oss import upload_image_bytes from .model import Image from .enums import LocalOrCloud from lin.db import db from lin.redprint import Redprint from lin.core import lin_config api = Redprint('oss') @api.route('/upload_to_local', methods=['POST']) def upload(): image = request.files.get('image', None) if not image: raise ParameterException(msg='没有找到图片') if image and allowed_file(image.filename): path = os.path.join(lin_config.get_config('oss.upload_folder'), image.filename) image.save(path) else: raise ParameterException(msg='图片类型不允许或图片key不合法') return Success() @api.route('/upload_to_ali', methods=['POST']) def upload_to_ali(): image = request.files.get('image', None) if not image:
""" Hello """ from lin.redprint import Redprint api = Redprint('user') @api.route('', methods=['POST']) def get_user(): return 'user'
from flask import request from lin.redprint import Redprint from sqlalchemy import text from app.model.v1.hotel import Hotel from app.model.v1.mysight import MySight from app.util.api_format import success_ret from app.util.page import paginate from app.util.spider import spider_main sights_api = Redprint("sights", __name__) @sights_api.route('/') def sight_api(): start, count = paginate() sort_type = request.args.get('sort_type') if sort_type == '1': sights = MySight.query.offset(start).limit(count).all() elif sort_type == '2': sights = (MySight.query.order_by( text("sight_point desc")).offset(start).limit(count).all()) else: sights = (MySight.query.order_by( text("sight_point asc")).offset(start).limit(count).all()) count = MySight.query.count() return success_ret(data=sights, count=count, type=sort_type) # 爬取酒店数据接口 @sights_api.route('/spider')