Beispiel #1
0
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)
Beispiel #2
0
"""
    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'])
Beispiel #3
0
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'])
Beispiel #4
0
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')
Beispiel #5
0
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='取消点赞成功')
Beispiel #6
0
# -*- 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')
Beispiel #7
0
# -*- 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)
Beispiel #8
0
# -*- 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')
Beispiel #9
0
"""
    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)
Beispiel #10
0
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)
Beispiel #11
0
"""
    :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 != ""):
Beispiel #12
0
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
Beispiel #13
0
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()

Beispiel #14
0
"""
    :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
Beispiel #15
0
"""
    :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)
Beispiel #16
0
# -*- 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)
Beispiel #17
0
"""
    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)
#
#
Beispiel #18
0
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)
Beispiel #19
0
"""
    :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
Beispiel #20
0
@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():
Beispiel #21
0
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
Beispiel #22
0
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='横幅子项')
Beispiel #23
0
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)
Beispiel #24
0
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
Beispiel #25
0
# -*- 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))
Beispiel #26
0
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():
    """
Beispiel #27
0
"""
  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 != '全部':
Beispiel #28
0
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:
Beispiel #29
0
"""
 Hello 

"""
from lin.redprint import Redprint

api = Redprint('user')


@api.route('', methods=['POST'])
def get_user():
    return 'user'
Beispiel #30
0
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')