Exemple #1
0
def home():
    uuid = session.get('uuid')
    if uuid:
        try:
            user_info = User.get(User.uuid == uuid)
        except Exception:
            session.clear()
            user_info = ''
    else:
        user_info = ''
    category_objects = Category.select(Content, Category) \
        .join(Content) \
        .where(Content.status == 1) \
        .group_by(Category.id) \
        .order_by(Category.name)
    volume_objects = Volume.select().where(Volume.status == 1).order_by(
        Volume.name.desc())
    content_objects = Content.select().where(Content.status == 1)
    return render_template('home.html',
                           user_info=user_info,
                           category_count=len(category_objects),
                           volume_count=len(volume_objects),
                           page_title=u'GitHub 上入门级、有趣、实用的开源项目',
                           project_count=len(content_objects),
                           last_volume_num=max([
                               volume_object.name
                               for volume_object in volume_objects
                           ]),
                           categorys=category_objects,
                           volumes=volume_objects)
Exemple #2
0
def volume(input_volume):
    menu_url = quote(request.path.encode('utf-8'))
    content_objects = Content.select(Content, Volume) \
        .join(Volume) \
        .where(Volume.name == input_volume, Volume.status == 1,
               Content.status == 1)
    category_list = Category.select().order_by(Category.name)

    contents = []
    index_num = 0
    for category_object in category_list:
        projects = [category_object.name]  # 类别放在list第一个
        for fi_content in content_objects:
            if fi_content.category.name == category_object.name:
                index_num += 1
                title_string = u'{num}、<a target="_blank" href="{url}">' \
                               u'{title}</a>:'\
                               .format(num=index_num,
                                       title=fi_content.title,
                                       url=fi_content.project_url)\
                               + fi_content.description
                fi_content.description = markdown2html(title_string)
                fi_content.image_url = make_image_url(fi_content.image_path)
                projects.append(fi_content)
        if not len(projects) == 1:
            contents.append(projects)

    return render_template('content.html',
                           contents=contents,
                           content_type='volume',
                           menu_url=menu_url,
                           page_title=u'第 {vol} 期'.format(vol=input_volume))
def read_from_db(volume_id):
    with database.execution_context():
        volume_object = Volume.select().where(Volume.id == volume_id).get()
        category_objects = Category.select().order_by(Category.name)
        content_objects = Content.select().where(
            Content.volume == volume_object)

        contents = []
        index_num = 0
        for category in category_objects:
            projects = [category.name]  # 类别放在list第一个
            for fi_content in content_objects:
                if fi_content.category.name == category.name:
                    index_num += 1
                    project_dict = {
                        'index_num': index_num,
                        'title': fi_content.title,
                        'description': fi_content.description,
                        'image_path': fi_content.image_path,
                        'project_url': fi_content.project_url,
                    }
                    projects.append(project_dict)
            if not len(projects) == 1:
                contents.append(projects)
    # contents 内容如下
    # [[catgory_name, project_info_dict1, project_info_dict2],...]
    return volume_object.name.encode('utf-8'), contents
Exemple #4
0
def search_project():
    project_url = request.args.get('project_url', '')
    if project_url:
        try:
            content_object = Content.select().where(
                Content.project_url == project_url).get()
        except DoesNotExist:
            return jsonify(code=400, message={})
        content_dict = model_to_dict(content_object)
        return jsonify(code=200, message=content_dict)
    else:
        return jsonify(code=400, message={})
Exemple #5
0
def project_list():
    """
    - 根据 category 条件搜索展示项目
    - 根据 volume 条件搜索展示项目
    """
    select_type = request.args.get('type', '')
    subset = request.args.get('subset', '')

    if select_type == 'volume' and subset:
        content_objects = Content.select()\
            .join(Volume)\
            .where(Volume.id == subset) \
            .order_by(Content.category.name)
        content_dicts = models_to_dicts(content_objects)
    elif select_type == 'category' and subset:
        content_objects = Content.select()\
            .join(Category)\
            .where(Category.id == subset) \
            .order_by(Content.volume.name)
        content_dicts = models_to_dicts(content_objects)
    else:
        content_dicts = []
        return jsonify(code=400, message=content_dicts)
    return jsonify(code=200, message=content_dicts)
Exemple #6
0
def publish_volume():
    volume_id = request.form.get('volume_id')
    volume_object = Volume.select().where(Volume.id == volume_id).get()
    content_objects = Content.select().join(Volume).where(
        Volume.id == volume_object.id)

    if volume_object.status == 1:
        with database.transaction():
            for content_object in content_objects:
                content_object.status = 0
                content_object.save()
            volume_object.status = 0
            volume_object.save()
        return jsonify(code=200,
                       message=u'{name},下线成功'.format(name=volume_object.name))
    elif volume_object.status == 0:
        with database.transaction():
            for content_object in content_objects:
                content_object.status = 1
                content_object.save()
            volume_object.status = 1
            volume_object.save()
        return jsonify(code=200,
                       message=u'{name},发布成功'.format(name=volume_object.name))
Exemple #7
0
def category(input_category):
    """
    PaginatedQuery 会通过 GET 请求的 page 参数返回该页的内容
    """
    menu_url = quote(request.path.encode('utf-8'))
    content_objects = Content.select(Category, Content).join(Category) \
        .where(Category.name == input_category, Content.status == 1)
    page_object = PaginatedQuery(content_objects,
                                 paginate_by=app.config['PAGE_MAX'],
                                 check_bounds=True)
    project_objects = page_object.get_object_list()
    for project_object in project_objects:
        project_object.description = markdown2html(project_object.description)
        project_object.image_url = make_image_url(project_object.image_path)
    page_count = page_object.get_page_count()
    current_page = page_object.get_page()
    return render_template('content.html',
                           projects=project_objects,
                           menu_url=menu_url,
                           content_type='category',
                           page_title=input_category,
                           category_url=quote(input_category.encode('utf-8')),
                           page_count=page_count,
                           current_page=current_page)
Exemple #8
0
def manage_content():
    """
    内容管理
    """
    if request.method == 'GET':
        category_objects = Category.select().order_by(Category.name)
        volume_objects = Volume.select().order_by(Volume.name.desc())

        project_id = request.args.get('project_id')
        if project_id:
            # 展示项目信息,用于更新
            content_object = Content.select().where(
                Content.id == project_id).get()
            result_dict = model_to_dict(content_object)
            result_dict['image_name'] = get_image_name(
                result_dict.get('image_path'))
            category_list = [(category_object.id, category_object.name)
                             for category_object in category_objects]
            volume_list = [(volume_object.id, volume_object.name)
                           for volume_object in volume_objects]
            result_dict['category_list'] = category_list
            result_dict['volume_list'] = volume_list
            return jsonify(code=200, message=result_dict)
        else:
            # 动态生成 内容管理 页面
            return render_template('manage_content.html',
                                   categorys=category_objects,
                                   volumes=volume_objects,
                                   page_title=u'内容管理')
    elif request.method in ['PUT', 'POST']:
        project_title = request.form.get('title')
        project_url = request.form.get('project_url')
        if not all([project_title, project_url]):
            return jsonify(code=400,
                           message=u'project_url 和 project_title 都不能为空')
        volume_id = request.form.get('volume_id')
        category_id = request.form.get('category_id')
        project_id = request.form.get('project_id')
        volume_object = Volume.select().where(Volume.id == volume_id)
        category_object = Category.select().where(Category.id == category_id)
        image_path = make_image_path(volume_object.get().name,
                                     request.form.get('image_name', ''))
        description = make_description(request.form.get('description', ''))
        project_data = {
            'title': project_title,
            'volume': volume_object,
            'category': category_object,
            'project_url': project_url,
            'image_path': image_path,
            'description': description
        }
        # 更新项目信息
        if request.method == 'PUT':
            try:
                Content.update(**project_data).where(
                    Content.id == project_id).execute()
                return jsonify(code=200,
                               message=u'更新内容 {title} 信息成功'.format(
                                   title=project_data['title']))
            except IntegrityError:
                return jsonify(code=400,
                               message=u'更新内容失败:{project_url} 已存在'.format(
                                   project_url=project_url))
        # 创建项目
        else:
            try:
                Content.create(**project_data)
                return jsonify(code=200,
                               message=u'新增内容 {title} 成功'.format(
                                   title=project_data['title']))
            except IntegrityError:
                return jsonify(code=400,
                               message=u'新增内容失败:{project_url} 已存在'.format(
                                   project_url=project_url))
    elif request.method == 'DELETE':
        # 删除项目
        project_id = request.form.get('project_id')
        project_title = request.form.get('project_title')
        if not all([project_id, project_title]):
            return jsonify(code=400,
                           message=u'删除内容失败:project_id 和 project_title 都不能为空')
        Content.delete().where(Content.id == project_id).execute()
        return jsonify(code=200,
                       message=u'删除内容:{title},成功'.format(title=project_title))
Exemple #9
0
def manage_volume():
    """
    期数管理
    """
    if request.method == 'GET':
        volume_id = request.args.get('volume_id')
        if volume_id:
            volume_object = Volume.select().where(Volume.id == volume_id).get()
            result_dict = model_to_dict(volume_object)
            return jsonify(code=200, message=result_dict)
        else:
            volume_objects = Volume.select().order_by(Volume.name)
            return render_template('manage_volume.html',
                                   volumes=volume_objects,
                                   page_title=u'Vol.管理')
    elif request.method == 'POST':
        # 新增一期
        volume_name = request.form.get('volume_name')
        if volume_name:
            try:
                Volume.create(name=volume_name)
                return jsonify(
                    code=200,
                    message=u'新增一期:{name},成功'.format(name=volume_name))
            except IntegrityError:
                return jsonify(
                    code=400,
                    message=u'新增一期失败:{name} 已存在'.format(name=volume_name))
        else:
            return jsonify(code=400, message=u'新增一期失败:volume_name 不能为空')
    elif request.method == 'PUT':
        # 更新 Vol.
        volume_name = request.form.get('volume_name')
        volume_id = request.form.get('volume_id')
        if not volume_name:
            return jsonify(code=400, message=u'更新 Vol. 失败:volume_name 不能为空')
        else:
            try:
                Volume.update(name=volume_name).where(
                    Volume.id == volume_id).execute()
                return jsonify(
                    code=200,
                    message=u'更新 Vol. {name} 信息成功'.format(name=volume_name))
            except IntegrityError:
                return jsonify(
                    code=400,
                    message=u'更新 Vol. 失败:{name} 已存在'.format(name=volume_name))
    elif request.method == 'DELETE':
        # 删除 Vol.
        volume_id = request.form.get('volume_id')
        volume_name = request.form.get('volume_name')
        try:
            content_query = Content.select()\
                .join(Volume)\
                .where(Volume.id == volume_id).get()
            project_url = content_query.project_url
            return jsonify(
                code=400,
                message=u'删除 Vol. 失败:{project_url}项目所属'
                u'于这个 Vol.,请先修改该项目期数'.format(project_url=project_url))
        except DoesNotExist:
            Volume.delete().where(Volume.id == volume_id).execute()
            return jsonify(
                code=200,
                message=u'删除 Vol.:{name},成功'.format(name=volume_name))
Exemple #10
0
def manage_category():
    """
    分类管理
    """
    if request.method == 'GET':
        category_id = request.args.get('category_id')
        if category_id:
            category_object = Category.select().where(
                Category.id == category_id).get()
            result_dict = model_to_dict(category_object)
            return jsonify(code=200, message=result_dict)
        else:
            category_objects = Category.select().order_by(Category.id)
            return render_template('manage_category.html',
                                   categorys=category_objects,
                                   page_title=u'分类管理')
    elif request.method == 'POST':
        # 新增分类
        category_name = request.form.get('category_name', '')
        if category_name:
            try:
                Category.create(name=category_name)
                return jsonify(
                    code=200,
                    message=u'新增分类:{name},成功'.format(name=category_name))
            except IntegrityError:
                return jsonify(code=400,
                               message=u'新增分类失败:{category_name} 已存在'.format(
                                   category_name=category_name))
        else:
            return jsonify(code=400, message=u'新增分类失败:分类名不能为空')
    elif request.method == 'PUT':
        # 更新分类
        category_name = request.form.get('category_name')
        category_id = request.form.get('category_id')
        if not category_name:
            return jsonify(code=400, message=u'更新分类失败:category_name 不能为空')
        else:
            try:
                Category.update(name=category_name).where(
                    Category.id == category_id).execute()
                return jsonify(
                    code=200,
                    message=u'更新分类 {name} 信息成功'.format(name=category_name))
            except IntegrityError:
                return jsonify(
                    code=400,
                    message=u'更新分类失败:{name} 已存在'.format(name=category_name))
    elif request.method == 'DELETE':
        # 删除分类
        category_id = request.form.get('category_id')
        category_name = request.form.get('category_name')
        try:
            content_query = Content.select()\
                .join(Category)\
                .where(Category.id == category_id).get()
            project_url = content_query.project_url
            return jsonify(code=400,
                           message=u'删除分类失败:{project_url}项目所属'
                           u'于这个分类,请先修改该项目类别'.format(project_url=project_url))
        except DoesNotExist:
            Category.delete().where(Category.id == category_id).execute()
            return jsonify(
                code=200, message=u'删除分类:{name},成功'.format(name=category_name))