def new_post(): if current_user.is_authenticated: categories = Category.query.all() tags = Tag.query.all() if request.method == 'POST': post = Post( title=request.values.get('title'), text=request.values.get('context'), publish_date=datetime.datetime.now(), modified_date=datetime.datetime.now(), user_id=current_user.id, ) if request.values.get('category') and isinstance( request.values.get('category'), int): post.category_id = request.values.get('category') if request.values.getlist('s_option'): for tag_id in request.values.getlist('s_option'): tag = Tag.query.filter_by(id=tag_id).first() post.tags.append(tag) db.session.add(post) db.session.commit() logger.info('用户"{}"新增了"{}"博文'.format(current_user.username, post.title)) return redirect( url_for('my_admin.post_adminter', username=current_user.username)) return render_template('blog/new_post.html', categories=categories, tags=tags) else: abort(404)
def upload_portrait(): if current_user.is_authenticated: if request.method == 'POST': file = request.files['file'] if file and check_file_type(file.filename): filename = secure_filename(file.filename) path = os.path.join(current_app.config['UPLOAD_FOLDER'], current_user.username) if not os.path.exists(path): os.makedirs(path) user = User.query.filter_by( username=current_user.username).first() user.head_portrait = str('user' + '/' + current_user.username + '/' + filename) db.session.add(user) db.session.commit() file.save(os.path.join(path, filename)) logger.info('用户"{}"修改头像为"{}"'.format(current_user.username, filename)) return redirect( url_for('my_admin.user_detail', username=current_user.username)) return '文件不存在' else: return {"error": "the way is not post or get"} else: return '您没有权限访问'
def send_mail_code(to: str): '''发送邮件验证码''' code = tools.new_token(3) logger.info(f'send {code} to {to}') redis.set(f'{settings.CODE_KEY}{to}', code, settings.CODE_KEY_EXPIRE) send_code(to, code) return response_code.resp_200('ok')
def get_health(): """ Health check Returns: The health status of the Tarkov app """ logger.info("Health check from {}".format(request.remote_addr)) return jsonify(healthy=True)
async def logger_request(request: Request, call_next): # https://stackoverflow.com/questions/60098005/fastapi-starlette-get-client-real-ip logger.info( f"访问记录:{request.method} url:{request.url}\nheaders:{request.headers.get('user-agent')}" f"\nIP:{request.client.host}") response = await call_next(request) return response
def tag_delete(user_id, tag_id): if current_user.id == user_id: tag = Tag.query.filter_by(id=tag_id).first_or_404() logger.info('用户"{}"删除"{}"标签'.format(current_user.username, tag.name)) db.session.delete(tag) db.session.commit() return redirect( url_for('my_admin.tag_adminter', username=current_user.username)) else: abort(404)
def cloud_hub_add_folder(): parent_dir, dir_name = request.values.get('parent_dir'), request.values.get('dir_name') if os.path.exists(parent_dir) and not os.path.exists(dir_name): if not os.path.exists(os.path.join(parent_dir, dir_name)): os.mkdir(os.path.join(parent_dir, dir_name)) logger.info('用户"{}"在"{}"新建了"{}"文件夹'.format(current_user.username, parent_dir,dir_name)) return redirect(url_for('cloud_hub.cloud_hub_folders', path=parent_dir)) else: return '文件已存在' return "请输入文件名"
def resp_success(code: int = 10000, message: str = '', print_msg: str = '', data: Any = None) -> dict: if print_msg: pass else: if message and message != 'success': print_msg = message if print_msg: logger.info(print_msg) return {'code': code, 'message': message, 'data': data}
def before_request(): """ Run before every request to API. """ logger.info( "Request from [%s]: %s %s %s", request.environ.get("HTTP_X_REAL_IP", request.remote_addr), request.method, request.scheme, request.full_path, )
def download_file(abspath): # 下载工厂函数 if os.path.exists(abspath): res = make_response( send_from_directory(os.path.dirname(abspath), os.path.basename(abspath), as_attachment=True), 200) logger.info('用户"{}"下载了"{}"文件'.format(current_user.username, os.path.basename(abspath))) # 中文的话 先编码再解码为latin-1 res.headers["Content-Disposition"] = "attachment; filename={}".format( os.path.basename(abspath).encode().decode('latin-1')) return res return "文件不存在"
def post_delete(user_id, post_id): user = User.query.filter_by(id=user_id).first_or_404() post = Post.query.filter_by(id=post_id).first_or_404() if post.user_id == user.id: logger.info('用户"{}"删除"{}"博文'.format(current_user.username, post.title)) db.session.delete(post) db.session.commit() return redirect( url_for('my_admin.post_adminter', username=user.username)) else: abort(404)
def create_app(config=None): app = Flask('scaffold', instance_relative_config=True) if config is not None: app.config.from_object(config) init_logger(app) logger.info('starting %s' % app.name) db.init_app(app) cors.init_app(app) celery.config_from_object(app.config) login_manager.init_app(app) api.init_app(app) init_api(api, app) logger.info('started %s' % app.name) return app
def distribution_permission(): permission_name = request.form.get('permission') user_id = request.form.get('user_id') user = User.query.get(int(user_id)) if user: role = Role.query.filter_by(name=permission_name).first() if role: b_permission = user.role.name user.role = role db.session.add(user) db.session.commit() logger.info('管理员{}将{}的权限从<{}>改为<{}>'.format( current_user.username, user.username, b_permission, user.role.name)) return redirect(url_for('my_admin.permission_manager')) abort(404)
def register_external(skip_sentry=False): """Register external integrations.""" # sentry if len(c.SENTRY_DSN) == 0: logger.warning("Sentry DSN not set.") elif skip_sentry: logger.info("Skipping Sentry Initialization for Celery.") else: sentry_sdk.init( c.SENTRY_DSN, integrations=[ FlaskIntegration(), RedisIntegration(), SqlalchemyIntegration(), ], )
def tag_edit(user_id, tag_id): if current_user.id == user_id: tag = Tag.query.filter_by(id=tag_id).first_or_404() b_tag_name = tag.name if request.method == 'POST': tag.name = request.values.get('tag_name') tag.modified_date = datetime.datetime.now() tag.user_id = current_user.id db.session.add(tag) db.session.commit() logger.info('用户"{}"将标签"{}"修改为"{}"'.format(current_user.username, b_tag_name, tag.name)) return redirect( url_for('my_admin.tag_adminter', username=current_user.username)) return render_template('blog/tag_edit.html', tag=tag) else: abort(404)
def new_category(): if current_user.is_authenticated: if request.method == 'POST': category = Category() category.name = request.values.get('category_name') category.publish_date = datetime.datetime.now() category.modified_date = datetime.datetime.now() category.user_id = current_user.id db.session.add(category) db.session.commit() logger.info('用户"{}"新增了"{}"分类'.format(current_user.username, category.name)) return redirect( url_for('my_admin.category_adminter', username=current_user.username)) return render_template('blog/new_category.html') else: abort(404)
def new_tag(): if current_user.is_authenticated: if request.method == 'POST': tag = Tag() tag.name = request.values.get('tag_name') tag.publish_date = datetime.datetime.now() tag.modified_date = datetime.datetime.now() tag.user_id = current_user.id db.session.add(tag) db.session.commit() logger.info('用户"{}"新增了"{}"标签'.format(current_user.username, tag.name)) return redirect( url_for('my_admin.tag_adminter', username=current_user.username)) return render_template('blog/new_tag.html') else: abort(404)
def locationSearch(location, hits): maxid = '' for i in range(hits): API.getHashtagFeed(location, maxid) data = API.LastJson try: for pic in data.get('items'): if pic.get('caption'): log.write(pic.get('caption').get('text')) #log.write(data.get('items')[0].get('caption').get('text')) log.write('\n \n') maxid = data.get('next_max_id') except Exception: logger.info(f'error on fetch') logger.info(data) break pass time.sleep(1)
def cloud_hub_uploads(): # 单文件上传 if request.method == 'POST': file = request.files.get('file') path = request.values.get('path') if file and check_file_type(file.filename): if path != "null": pass else: path = os.path.join(current_app.config['UPLOAD_FOLDER'], current_user.username) if not os.path.exists(path): os.makedirs(path) # 如果不存在这样的路径那么直接创键这样的目录 file.save(os.path.join(path, file.filename)) logger.info('用户"{}"上传了"{}"文件'.format(current_user.username, file.filename)) return "upload success" return '文件不存在', 404 return render_template('cloud_hub/cloud_hub_index.html')
def sendmessage(message: user.MessageBase ): #_from: str, message_to: str, message_content: str): [message_from, message_to, message_content, message_status, message_date] = \ map(message.dict().get, ['message_from', 'message_to', 'message_content', 'message_status', 'message_date']) print(message_from, message_to, message_content, message_status, message_date) _id = db.messages.insert({ 'message_from': message_from, 'message_to': message_to, 'message_content': message_content, 'message_status': False, 'message_date': time.time() }) logger.info(f'{message_from} send {message_content} to {message_to} ') redis.set(f'{settings.MESSAGE_KEY}{message_from}:{message_to}', message_content) ctx = {'code': '200', 'id': str(_id)} return response_code.resp_200(ctx)
def category_edit(user_id, category_id): if current_user.id == user_id: category = Category.query.filter_by(id=category_id).first_or_404() b_category_name = category.name if request.method == 'POST': category.name = request.values.get('category_name') category.modified_date = datetime.datetime.now() category.user_id = current_user.id db.session.add(category) db.session.commit() logger.info('用户"{}"将分类"{}"修改为"{}"'.format(current_user.username, b_category_name, category.name)) return redirect( url_for('my_admin.category_adminter', username=current_user.username)) return render_template('blog/category_edit.html', category=category) else: abort(404)
def login(): if request.method == 'POST': user = User.query.filter_by( username=request.values.get('username')).first() user2 = User.query.filter_by( email=request.values.get('username')).first() if user is not None and user.verify_password( request.values.get('password')): login_user(user, remember=request.values.get('remember-me')) logger.info('用户 "{}" 登陆成功'.format(user.username)) return redirect(request.args.get('next') or url_for('main.index')) if user2 is not None and user2.verify_password( request.values.get('password')): login_user(user2, remember=request.values.get('remember-me')) logger.info('用户"{}"登陆成功'.format(user2.username)) return redirect(request.args.get('next') or url_for('main.index')) else: abort(404) return render_template('blog/login.html', next=request.args.get('next'))
def on_message(self, client, userdata, msg): """获得消息事件,触发动作,匹配不到 message_callback_add 时使用这个""" logger.info('on_message'.center(40, '*')) payload = msg.payload.decode('utf-8') logger.info(f'on_message topic: {msg.topic}') logger.info(payload)
def add_novel(): book_link = request.values.get('link') book_name = request.values.get('book_name') if book_name and book_link: # 这里有个爬取 作者 更新日期 创建日期为 自己加入书架的日期 本书状态 最新一章 image, author, modified_date, status, latest_chapter = BookSpider.get_message( book_link) case = Book() case.name = book_name case.link = book_link case.author = author case.modified_date = modified_date case.latest_chapter = latest_chapter case.users = current_user try: db.session.add(case) db.session.commit() except sqlalchemy.exc.IntegrityError: logger.info('用户"{}"无法再次添加书籍'.format(current_user.username)) return "无法再次添加书籍" logger.info('用户"{}"将"{}"加入了书架'.format(current_user.username, book_name)) return '添加成功', 200 else: logger.info("请求格式正确, 但由于语法错误, 无法响应") return 'fail', 402
def authorized(): resp = github.authorized_response() if resp is None or resp.get('access_token') is None: return 'Access denied: reason=%s error=%s resp=%s' % ( request.args['error'], request.args['error_description'], resp) session['github_token'] = (resp['access_token'], '') me = github.get('user') user = User.query.filter_by(username=me.data.get('login')).first() if not user: from random import randint user = User(username=me.data.get('login'), password=str(randint(100000, 10000000)), publish_date=datetime.datetime.now()) # 这里的password下次使用随机的密码 # 邮箱貌似获取不了 db.session.add(user) db.session.commit() login_user(user) logger.info('GITHUB 用户"{}"注册并登录成功'.format(current_user.username)) else: login_user(user) logger.info('GITHUB 用户"{}"登陆成功'.format(current_user.username)) return redirect(url_for('main.index'))
def register(): if request.method == 'POST': user = User() if not register_filter( request.form.get('username'), request.form.get('email'), request.form.get('password1'), request.form.get('password2')): abort(403) try: user.username = request.form.get('username') user.email = request.form.get('email') user.password = request.form.get('password1') user.publish_date = datetime.datetime.now() user.modified_date = datetime.datetime.now() db.session.add(user) db.session.commit() except sqlalchemy.exc.IntegrityError: logger.error("注册失败-> 密码或用户名已被他人所占用") return '密码或用户名已被他人所占用', 400 else: login_user(user) logger.info('用户 "{}" 注册成功'.format(user.username)) return redirect(url_for('main.index')) return render_template('blog/register.html')
def sendmessage(message: user.MessageBase): [message_from, message_to, message_content, message_date] = \ map(message.dict().get, ['message_from', 'message_to', 'message_content', 'message_date']) try: _id = db.messages.find_one_and_update( { 'message_from': message_from, 'message_to': message_to, 'message_content': message_content }, {'$set': { 'message_status': True, 'message_date': message_date }}, retrundocument=ReturnDocument.AFTER) assert _id logger.info( f'del {message_from} send {message_content} to {message_to} ') redis.delete(f'{settings.MESSAGE_KEY}{message_from}:{message_to}', message_content) ctx = {'code': '200', 'id': str(_id)} return response_code.resp_200(ctx) except Exception as e: return response_code.resp_500()
def post_edit(user_id, post_id): user = User.query.filter_by(id=user_id).first_or_404() post = Post.query.filter_by(id=post_id).first_or_404() categories = Category.query.filter_by(user_id=current_user.id).all() cat = Category.query.filter_by(id=post.category_id).first() tags = Tag.query.filter_by(user_id=current_user.id).all() title = post.title if request.method == 'POST': if post.user_id == user.id: post.title = request.values.get('title') post.text = request.values.get('context') post.modified_date = datetime.datetime.now() tag_s = request.values.getlist('s_option') # 得到Tag 的 id if tag_s: for tag_id in tag_s: t = Tag.query.filter_by(id=int(tag_id)).first() post.tags.append(t) if request.values.get('category') == '' or None: db.session.add(post) db.session.commit() else: post.category_id = request.values.get('category') logger.info('用户"{}"修改了"{}"博文'.format(current_user.username, title)) db.session.add(post) db.session.commit() return redirect( url_for('my_admin.post_adminter', username=user.username)) return render_template('blog/post_edit.html', post=post, categories=categories, cat=cat, tags=tags)
async def log_request_detail(request: Request): logger.info('start request'.center(60, '*')) logger.info(f'{request.method} {request.url}') methods = ['POST', 'PUT', 'PATCH'] content_type = request.headers.get('content-type', '') if request.method in methods and 'application/json' in content_type: try: payload = await request.json() if payload: logger.info(payload) except JSONDecodeError: logger.error('encounter JSONDecodeError') except UnicodeDecodeError: logger.error('encounter UnicodeDecodeError') logger.info('end request'.center(60, '*')) return await original_route_handler(request)
def on_publish(self, client, userdata, mid): """发布消息事件""" logger.info('on_publish'.center(40, '*')) logger.info(f'on_publish: mid = {mid}')
def logout(): logger.info('用户"{}"注销成功'.format(current_user.username)) logout_user() return redirect(url_for('main.index'))