예제 #1
0
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)
예제 #2
0
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 '您没有权限访问'
예제 #3
0
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')
예제 #4
0
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)
예제 #5
0
    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
예제 #6
0
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)
예제 #7
0
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 "请输入文件名"
예제 #8
0
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}
예제 #9
0
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,
    )
예제 #10
0
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 "文件不存在"
예제 #11
0
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)
예제 #12
0
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
예제 #13
0
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)
예제 #14
0
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(),
            ],
        )
예제 #15
0
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)
예제 #16
0
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)
예제 #17
0
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)
예제 #19
0
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')
예제 #20
0
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)
예제 #21
0
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)
예제 #22
0
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'))
예제 #23
0
    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)
예제 #24
0
파일: views.py 프로젝트: BUGLAN/blog
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
예제 #25
0
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'))
예제 #26
0
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')
예제 #27
0
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()
예제 #28
0
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)
예제 #29
0
        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)
예제 #30
0
    def on_publish(self, client, userdata, mid):
        """发布消息事件"""

        logger.info('on_publish'.center(40, '*'))
        logger.info(f'on_publish: mid = {mid}')
예제 #31
0
def logout():
    logger.info('用户"{}"注销成功'.format(current_user.username))
    logout_user()
    return redirect(url_for('main.index'))