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)
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
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={})
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)
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))
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)
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))
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))
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))