from app.libs.redprint import Redprint from flask import request, g, current_app from app.libs.auth import auth from app.models.auth import User, Role, Permission from app.libs.error_types import AuthFailedException from app.libs.success_types import Success login = Redprint('login') @login.route('/token', methods=['POST']) def get_token(): data = request.get_json(silent=True) username = data.get('username') password = data.get('password') user = User.get_item_by_name(name=username) if not user or not user.verify_password(password): return AuthFailedException(msg='user or secret error') return Success(msg={ 'token': user.generate_api_auth_token(current_app.config['TOKEN_EXPIRATION']) }) @login.route('/user_info', methods=['GET']) @auth.login_required def get_user_info(): data = { 'uid': g.current_user.uid, 'name': g.current_user.name, 'roles': [],
# user = Blueprint('user',__name__) # @user.route('/v1/user/get') # def get_user(): # return 'imwl' from app.libs.redprint import Redprint from app.libs.token_auth import auth from app.models.user import User from app.models.base import db from flask import jsonify ,g from app.libs.erro_code import DeleteSuccess, AuthFailed api = Redprint('user') # class Wei(): # name = 'weilai' # age = 'age' # def __init__(self): # self.gender = 'male' # def keys(self): # return ('name','age','gender') # 取到 key , 做到自定义key # # # return ('name',) # 一个元素的元组 # # return ['name'] # return 序列类型的都可以 # def __getitem__(self,item): # return getattr(self,item) # 取到 key对应的value
from flask import request, flash from app.libs.enums import ClientTypeEnum from app.libs.redprint import Redprint from app.models.user import User from app.validators.forms import ClientForm, UserEmailForm from sep_flask.app.models.base import db api = Redprint('client') # 这个视图函数就没有对数据库进行操作! 装逼装的都不认识了!没有必要! @api.route('/register', methods=['POST']) def create_client(): data = request.get_json() # 在这里接收参数 form = ClientForm(data=data) # 在这里校验参数(类似爬虫里面的解析) 在WTForms源码中 if form.validate(): # 执行校验 #如果通过校验了就可以进行注册了 羡慕就是注册方法,用字典触发字典的值,也就是那个注册函数 promise = {ClientTypeEnum.USER_EMAIL: __register_user_by_email} promise[form.type.data]() # u = User(email=form.email.data, # _password=form.secret.data, # nickname=form.email.data) # # 将用户对象保存到数据库 # db.session.add(u) # # 下面生成token需要用户id,此时还没有id,需要手动提交 # db.session.commit() # 提示用户下一步操作 # flash('注册成功')
from app.libs.enums import ReturnEnum from app.libs.redprint import Redprint from app.libs.utils import write_oplog from app.models.base import db from app.models.video import Tag from app.view_models.return_obj import ReturnObj """ 视频标签模块(视频管理员,超级管理员) 添加标签 编辑标签 列出标签 删除标签 """ tag = Redprint("tag") @tag.route("/add", methods=["POST"]) @login_required @user_auth @swag_from("../../yml/admin/tag/add_tag.yml") def add_tag(): form = TagAddForm().validate_for_api() with db.auto_commit(): tag = Tag() if form.parent_id.data: tag.parent_id = form.parent_id.data tag.name = form.name.data tag.info = form.info.data db.session.add(tag)
from app.libs.redprint import Redprint from app.libs.utils import make_dir, change_filename, allowed_image_file, allowed_video_file, write_oplog from app.models.base import db from app.models.video import Video, Tag, Bangumi, Episode from app.view_models.return_obj import ReturnObj """ 番剧模块(视频管理员,超级管理员) 添加番剧 列出番剧 编辑番剧 删除番剧 查询番剧 添加番剧视频 """ bangumi = Redprint("bangumi") @bangumi.route("/add", methods=["POST"]) @login_required @user_auth @swag_from("../../yml/admin/bangumi/add_bangumi.yml") def add_bangumi(): form = BangumiAddForm().validate_for_api() with db.auto_commit(): bangumi = Bangumi() bangumi.name = form.name.data bangumi.info = form.info.data if form.voice_actors.data: bangumi.voice_actors = form.voice_actors.data if form.staff.data:
# -*- coding:utf-8 -*- # @Author :xuchaoqiang # redprint from flask import jsonify from sqlalchemy import or_ from app.forms.book import BookSearchForm from app.libs.redprint import Redprint from app.models.book import Book api = Redprint("book") @api.route('') def search(): form = BookSearchForm().validate_for_api() # sqlachemy模糊匹配 q = '%' + form.q.data + '%' books = Book.query.filter(or_(Book.title.like(q), Book.publisher.like(q))).all() books = [book.hide('summary') for book in books] return jsonify(books)
from app.forms.auth import PwdForm from app.forms.other import PageForm, IdForm from app.forms.user import UserEditForm, FanOrFollowForm, CancelColForm from app.forms.videoform import UploadForm from app.libs.auth import unload_auth from app.libs.enums import GenderEnum, ReturnEnum from app.libs.redprint import Redprint from app.libs.utils import change_filename, num_assign, allowed_image_file, allowed_video_file from app.models.base import db from app.models.log import ViewLog, LoginLog from app.models.user import BaseUser, User, Follow from app.models.video import BangumiCol, Tag, VideoCol, Bangumi, Video, Comment, UploadVideo, Verification from app.view_models.return_obj import ReturnObj personal = Redprint("personal") @personal.route("/get_user") @login_required def get_user(): """查看用户信息""" baseuser = BaseUser.query.filter(BaseUser.id == current_user.id). \ first_or_404(description="找不到该用户") user = User.query.filter(User.id == baseuser.id).first() r = { "user": { "id": baseuser.id, "name": baseuser.name, "account": baseuser.account, "gender": GenderEnum(baseuser.gender).name,
""" *@ClassName user *@Description TODO 关于User的视图函数 127.0.0.1:5000/v1/user/get *@Author to2bage *@Date 2020-07-26 10:20 *@Version 1.0 """ from app.libs.redprint import Redprint api = Redprint("user") @api.route("/get") def get_user(): return " i am totobage"
from flask_login import login_user, logout_user from app.libs.redprint import Redprint from flask import render_template, request, flash, redirect, url_for from app.forms.auth import LoginForm, RegisterForm, EmailForm, ResetPasswordForm from app.libs.token_auth import translate_token from app.libs.util import send_email from app.models import db from app.models.user import User redprint = Redprint('auth') @redprint.route('/login', methods=['GET', 'POST']) def login(): form = LoginForm(request.form) if request.method == 'POST' and form.validate(): user = User.query.filter_by(email=form.email.data).first_or_404() if user.is_active and user.check_password(form.password.data): login_user(user, remember=True) # 处理重定向 next = request.args.get('next') if next and str(next).startswith('/'): return redirect(next) else: return redirect(url_for('web.index')) else: flash('账号未激活或密码错误') return render_template('auth/login.html', form=form)
""" Created by Danny on 2018/12/11 """ from app.libs.redprint import Redprint from app.libs.error_code import Success, NotFound, ParameterException, AuthFailed from app.validators.forms import CartForm from flask import g, jsonify, request from app.models.food.food import Food from app.models.member.member_cart import MemberCart from app.libs.token_auth import auth from app.libs.helper import select_filter_obj, get_dict_filter_field from app.libs.url_manager import UrlManager import json __author__ = 'Danny' api = Redprint('cart') @api.route("/index") @auth.login_required def cart_index(): member_info = g.user if not member_info: return AuthFailed('请先登录') cart_list = MemberCart.query.filter_by(member_id=member_info.uid).all() data_cart_list = [] resp = {} if cart_list: food_ids = select_filter_obj(cart_list, "food_id") food_map = get_dict_filter_field(Food, Food.id, "id", food_ids) for item in cart_list:
import os import shutil from flask import jsonify, current_app from app.libs.redprint import Redprint from app.models import db, json2db from app.models.base_line import Patient, PastHis, DrugHistory, IniDiaPro from app.models.crf_info import FollInfo from app.models.cycle import Immunohis, MoleDetec from app.models.lab_inspectation import BloodRoutine, BloodBio, Thyroid, Coagulation, MyocardialEnzyme, Cytokines, \ LymSubsets, UrineRoutine, TumorMarker from app.models.other_inspect import Lung, OtherExams, ImageExams from app.models.therapy_record import Surgery, Radiotherapy, OneToFive api = Redprint('migrate') # 迁移update_time @api.route('/update_time', methods=['GET']) def migrate_update_time(): patients = Patient.query.filter_by().all() with db.auto_commit(): for patient in patients: patient.update_time = patient.updateTime return 'ok' @api.route('/hormone_drug', methods=['GET']) def migrate_hormone_drug(): hormone_items = PastHis.query.filter(PastHis.is_delete == 0,
from app.libs.auth import user_auth from app.libs.enums import ReturnEnum from app.libs.redprint import Redprint from app.libs.utils import logging, change_filename, allowed_image_file, write_oplog from app.models.base import db from app.models.video import Animation, Tag from app.view_models.return_obj import ReturnObj """ 轮播图模块(视频管理员,超级管理员) 添加轮播图 列出轮播图 删除轮播图 编辑轮播图 """ animation = Redprint("animation") @animation.route("/add", methods=["POST"]) @login_required @user_auth @swag_from("../../yml/admin/animation/add_animation.yml", methods=['POST']) def add_animation(): """添加轮播图""" form = AnimationAddForm().validate_for_api() with db.auto_commit(): animation = Animation() animation.name = form.name.data try: file = request.files[form.logo.name] if not allowed_image_file(file.filename):
# import json from flask import jsonify, request import json import collections from rasterio.warp import transform_bounds from mercantile import tiles, xy_bounds from robosat_pink.geojson import geojson_parse_feature from app.models.base import queryBySQL, db as DB from app.libs.redprint import Redprint from app.config import setting as SETTING from app.models.task_admin import task_admin as TASK_ADMIN api = Redprint('task_admin') @api.route('', methods=['GET']) def create_task_by_areacode(): result = {"code": 1, "data": None, "msg": "create bat task success!"} areacode = request.args.get('areacode') zoom = request.args.get('zoom') or '14' # 将区域范围分割成zoom级别瓦片大小的任务 zoom = eval(zoom) if not areacode: result['code'] = 0 result['msg'] = "no areacode params" return jsonify(result) quhuaTable = '' if len(areacode) == 9: #FIXME:bug when null areacode quhuaTable = SETTING.QUHUA_XIANG elif len(areacode) == 6:
from flask import request, g from app.libs.decorator import edit_need_auth from app.libs.error import Success from app.libs.error_code import ParameterException from app.libs.redprint import Redprint from app.libs.token_auth import auth from app.models import json2db from app.models.base_line import Patient from app.spider.user_info import UserInfo api = Redprint('patient') @api.route('/<int:id>',methods = ['GET']) def get_patient(id): patient = Patient.query.filter_by(id=id).first() return Success(data=patient if patient else {}) @api.route('/<int:pid>',methods = ['POST']) @auth.login_required @edit_need_auth def add_patient(pid): data = request.get_json() patient = Patient.query.get_or_404(pid) if 'idNumber' in data: item = Patient.query.filter(Patient.is_delete == 0, Patient.idNumber == data['idNumber'], Patient.id != pid, Patient.researchCenter == patient.researchCenter).first() if item: raise ParameterException(msg='已经存在相同身份证号码。') if 'hospitalNumber' in data and patient.hospitalNumber is not None:
from flask import g from app.libs.error_code import Success, DuplicateGift from app.libs.redprint import Redprint from app.libs.token_auth import auth from app.models.base import db from app.models.book import Book from app.models.gift import Gift api = Redprint('gift') @api.route('/<isbn>', methods=['POST']) @auth.login_required def create(isbn): uid = g.user.uid with db.auto_commit(): Book.query.filter_by(isbn=isbn).first_or_404() gift = Gift.query.filter_by(isbn=isbn, uid=uid, launched=False).first() if gift: raise DuplicateGift() gift = Gift() gift.isbn = isbn gift.uid = uid db.session.add(gift) return Success()
import datetime from flask import request, g from flask_jwt_extended import create_access_token from flask_restful import Resource from app.models.user import User from app.libs.redprint import Redprint api = Redprint('login') class LoginAPI(Resource): def post(self): if not request.is_json: return {"msg": "Missing JSON in request"}, 400 username = request.json.get('username', None) password = request.json.get('password', None) if not username: return {"msg": "Missing username parameter"}, 400 if not password: return {"msg": "Missing password parameter"}, 400 user = User.objects(name=username).first() if user is None: return {"msg": "Bad username"}, 401 if not user.verify_password(password): return {"msg": "Bad password"}, 401
com_ = """ Created by Kenneth Luff Email: [email protected] """ from app.libs.redprint import Redprint from flask import render_template admin = Redprint('picture') #图片列表 @admin.route('/picture_list') def picture_list(): return render_template('admin/picture-list.html') #图片展示 @admin.route('/picture_show') def pictrue_show(): return render_template('admin/picture-show.html') #添加图片 @admin.route('/picture_add') def pictrue_add(): return render_template('admin/picture-add.html')
''' 爬虫处理器 ''' import json, time from app.models.spider_handlers import Spider from flask import render_template, flash, request, jsonify, url_for, redirect from app.libs.redprint import Redprint __author__ = "带土" api = Redprint('startSpider') @api.route("", methods=["POST"]) def startSpider(): _spider = Spider() count = _spider.spiderMain() obj = { "resultCode": "20000", "message": f"网络爬虫收获{count}条数据。", "result": count } return jsonify(obj)
from app.libs.token_auth import auth from app.validators.forms_v1 import StatQiSituationForm, StatQiScoreForm, StatQiScoreBranchForm, \ StatQiScoreAgentForm, StatQiRuleForm, StatOpDurationForm, StatOpSilenceForm, StatOpRepeatForm, StatOpReasonForm, \ StatOpHotForm, StatOpBusinessForm from app.libs.redprint import Redprint from app.libs.error_code import ResultSuccess, PageResultSuccess from app.libs.qpaginate import pager from app.models.base import db_v1 from app.models.qi_qia_models import QiScoreCall, QiInfoTraffic, QiInfoMapRule, QiResultsDetail, QiInfoUser, \ QiInfoBranch, QiResultsBusinessAnalysis, QiInfoCallReasonType, QiResultsRepeatCall, QiInfoBusinessType, \ QiResultsBusinessTrend, QiResultsHotword, QiCallDuration, QiInfoRole from app.validators.base import PageForm api = Redprint('learn') logger = logging.getLogger(__name__) def _branch_sub_rel_reformer(branch_id_pairs, max_deep=10): branch_sub_rel = defaultdict(set) for b_id, b_supid in branch_id_pairs: branch_sub_rel[b_supid].add(b_id) branch_all_sub_rel = defaultdict(set) for k, sub_ids in branch_sub_rel.items(): all_sub_ids = set() id_stack = deque([ k, ]) deep_counter = 0 deep_limit = max_deep - 1
from flask import send_from_directory from sqlalchemy import and_, or_ import os, difflib from app.libs.redprint import Redprint from app.libs.token_auth import auth from app.config.setting import LAND_VIEW_TYPE, LAND_USAGE_TYPE, LAND_REGION, LAND_BLOCK_STATUS, LAND_FILE_TYPE from app.view_models.redict import SuccessViewModel, isempty, land_order_ad from app.models.land import Land from app.view_models.land import LandViewModel from app.validators.forms import LandFilterForm, LandFilterFormId, LandFileDn, LandSearchForm from app.view_models.redict import DataLayer, MultiSelect, PageChoose, DateIsEmpty api = Redprint('land') @api.route('/all') @auth.login_required def all(): lands = Land.query.all() lands = [LandViewModel.landviewmodel(land) for land in lands] # 显示状态码 for land in lands: land["display_code"] = 0 lands[0]["display_code"] = 1 return SuccessViewModel.redict(lands) # POST筛选
from flask import request from app.libs.enums import ClientTypeEnum from app.libs.redprint import Redprint from app.models.user import User from app.validators.forms import ClientForm, UserEmailForm api = Redprint("client") @api.route("/register", methods=["POST"]) def create_client(): data = request.json form = ClientForm(data=data) if form.validate(): promise = { ClientTypeEnum.USER_EMAIL: __register_user_by_email, } promise[form.type.data]() # 注册 登录 # 参数 校验 接收参数 # WTForms pass def __register_user_by_email(): form = UserEmailForm(data=request.json) form.validate() User.register_by_email(form.nickname.data, form.account.data, form.secret.data) pass
# -*- coding: utf-8 -*- # @Time : 2020/5/20 上午12:53 # @Author : iGolden # @Software: PyCharm from flask import jsonify from app.libs.error_code import Success from app.libs.redprint import Redprint from app.libs.token_auth import auth from app.models.comments import Comments from app.validators.forms import CommentsForm, PostIdForm api = Redprint('comments') @api.route('/save', methods=['POST']) @auth.login_required def save_posts(): form = CommentsForm().validate_for_api() Comments.save_comments(form.post_id.data, form.content.data) return Success(msg='评论创建成功!') @api.route('/posts', methods=['POST']) @auth.login_required def posts_comments(): form = PostIdForm().validate_for_api() list = Comments.posts_comments(form.post_id.data) return jsonify(list)
# -*- coding: utf-8 -*- # __author__ = 'Miracle' from app.libs.redprint import Redprint api = Redprint('book', url_prefix='/book') @api.route('/search/') def search(): return 'book'
import requests from flask import request, Response from app.libs.redprint import Redprint from app.config import setting as SETTING api = Redprint('wmts') @api.route('/<z>/<x>/<y>', methods=['GET']) def wmts(x, y, z): map = request.args.get("type") if not x or not y or not z: return None if not map and map != "tdt" and map != "google": return "faild to set map type, neither tianditu nor google" url = SETTING.URL_TDT url_google = SETTING.URL_GOOGLE if map == 'google': url = url_google image = requests.get(url.format(x=x, y=y, z=z)) print(url.format(x=x, y=y, z=z)) return Response(image, mimetype='image/jpeg')
from flask import current_app, jsonify from app.libs.enums import ClientTypeEnum from app.libs.error_code import AuthFailed from app.libs.redprint import Redprint from app.models.user import User from app.validators.forms import ClientForm, TokenForm from itsdangerous import TimedJSONWebSignatureSerializer as Serializer, SignatureExpired, \ BadSignature api = Redprint('token') @api.route('', methods=['POST']) # post is more d def get_token(): form = ClientForm().validate_for_api() promise = { ClientTypeEnum.USER_EMAIL: User.verify, } identity = promise[ClientTypeEnum(form.type.data)](form.account.data, form.secret.data) # Token expiration = current_app.config['TOKEN_EXPIRATION'] token = generate_auth_token(identity['uid'], form.type.data, identity['scope'], expiration) t = { 'token': token.decode('ascii') # 成为普通的字符串 } return jsonify(t), 201
from flask import jsonify, request from app.libs.redprint import Redprint from app.models.base import db from app.models.grade import Grade from app.models.group_team import Group_team from app.models.league import League from app.models.schedule import Schedule from app.models.school import School from app.libs.error_code import Success from app.models.turns import Turns api = Redprint('turns') @api.route('/create', methods=['POST']) def create_turns(): jsonData = request.get_json() with db.auto_commit(): turns = Turns() turns.league_id = jsonData['league_id'] turns.turns_name = jsonData['turns_name'] db.session.add(turns) return Success(msg='新增轮次成功') @api.route('/get') def get_turns(): # 通过赛事league_id查询出league_type赛事类型(联赛或者杯赛),根据league_id设置schedule_process返回到前端, # 在前端传新增赛程数据的时候传到后端,来区别这场比赛是联赛的比赛,还是杯赛的淘汰赛,还是小组赛 league_id = request.args.get('league_id') league = db.session.query(League).filter(League.league_id == league_id)
from flask import Blueprint, jsonify from sqlalchemy import or_ from app.libs.redprint import Redprint from app.models.book import Book from app.validators.forms import BookSearchForm api = Redprint('book') @api.route('', methods=['GET']) def get_book(): return 'get book' @api.route('', methods=['POST']) def create_book(): return 'create book' @api.route('/search') def search(): form = BookSearchForm().validate_for_api() q = '%' + form.q.data + '%' books = Book.query.filter(or_(Book.title.like(q), Book.publisher.like(q))).all() books = [book.hide('summary') for book in books] return jsonify(books) @api.route('/<isbn>/detail')
from flask import jsonify from app.libs.redprint import Redprint from app.libs.toke_auth import auth from app.models.department import Department from app.view_models.department import DepartmentCollection from app.validators.department import DepartmentForm, DepartmentEditForm, DepartmentDeleteForm from app.libs.error_code import Success api = Redprint('department') @api.route('/<int:id>', methods=['GET']) @auth.login_required def get_department(id): department = Department.query.get_or_404(id) return jsonify(department) @api.route('', methods=['GET']) @auth.login_required def get_department_schema(): department = Department.query.all() # 使用ViewModel department_view = DepartmentCollection() department_view.get_department(department) return jsonify(department_view) @api.route('', methods=['POST'])
import base64 import random from uuid import uuid4 from io import BytesIO from flask import jsonify from app.libs.error_code import Forbidden, Success, ParameterException from app.libs.mail import send_verification_mail from app.libs.redprint import Redprint from app.libs.token_auth import auth from app.validators.forms import MailForm, CodeForm from captcha.image import ImageCaptcha from app import redis as rd api = Redprint('captcha') @api.route('/image', methods=['GET']) def get_image_captcha_api(): uuid = 'I-' + _generate_uuid() code = _generate_code() rd.hmset(uuid, { 'code': code, 'success': 0, }) rd.expire(uuid, 300) img = ImageCaptcha() image = img.generate_image(code) base64_str = _image_to_base64(image) return jsonify({'code': 0, 'data': {'image': base64_str, 'uuid': uuid}})
from flask import current_app, jsonify, g, request from app.libs.redprint import Redprint from app.models.opLog import OperateLog from app.libs.token_auth import login_required from app.libs.status_code import ParameterException from datetime import datetime from sqlalchemy import and_ api = Redprint('operate-log') @api.route('/get-my-operate-log') @login_required(['admin', 'hr']) def get_operate_log(): page = request.args.get('page') page_size = request.args.get('pageSize') operate_type = request.args.get('type') start_time = request.args.get('startTime') end_time = request.args.get('endTime') if not page or not page_size: return ParameterException(msg="缺少分页信息") try: page = int(page) page_size = int(page_size) except ValueError: return ParameterException("当前页或页数格式错误") user_id = g.user.uid if operate_type and not start_time and not end_time: operate_log_list_pagination = OperateLog.query.filter( OperateLog.operateType.like(f'%{operate_type}%'), OperateLog.operatorId == user_id,