def set_admin_user(phone=None): u""" 设置用户为管理员 用法(在项目根目录执行下列命令): 线下:python console.py set_admin_user -p=手机号 线上:XIAOLI_ENV=production PYTHONPATH=. python console.py set_admin_user -p=手机号 """ if not phone: print "No phone given! Exit" return with db_session_cm() as session: try: user = session.query(Account).filter(Account.cellphone == phone).one() if user.is_admin: print "phone %s is admin now!" % phone return user.type = Account.TYPE_ADMIN session.add(user) session.commit() print "Set user[%s] to admin" % phone except NoResultFound as e: print "phone %s not exists!" % phone except Exception as e: print traceback.format_exc(e)
def keywords(): u"""关键字""" page = request.args.get("page", 1, type=int) per_page = request.args.get("per_page", PlanKeyword.PER_PAGE, type=int) q = request.args.get("q") with db_session_cm() as session: keywords_query = session.query(PlanKeyword) search = False if q: search = True q_string = "%%%s%%" % q keywords_query = keywords_query.filter(PlanKeyword.content.like(q_string)) pagination = Pagination(page=page, found=keywords_query.count(), total=keywords_query.count(), search=search, record_name=_(u"关键字"), bs_version=3 ) keywords = keywords_query.order_by(PlanKeyword.id.desc()).offset((page - 1) * per_page).limit(per_page) context = { "keywords": keywords.all(), "pagination": pagination, "q": q } return render_template("admin/keyword/index.html", **context)
def plans(): u"""方案列表""" page = request.args.get("page", 1, type=int) per_page = request.args.get("per_page", Account.PER_PAGE, type=int) q = request.args.get("q") with db_session_cm() as session: plans_query = session.query(Plan) search = False if q: search = True q_string = "%%%s%%" % q plans_query = plans_query.filter(Plan.title.like(q_string)) pagination = Pagination( page=page, found=plans_query.count(), total=plans_query.count(), search=search, record_name=_(u"方案"), bs_version=3 ) plans_query = plans_query.order_by(Plan.create_time.desc()).offset((page - 1) * per_page).limit(per_page) context = { "plans": plans_query.all(), "pagination": pagination, "q": q } return render_template("admin/plan/index.html", **context)
def choices(cls): options = [] with db_session_cm() as session: keywords = session.query(PlanKeyword).all() for kw in keywords: options.append((kw.id, kw.content)) return options
def accounts(): u"""用户列表""" page = request.args.get("page", 1, type=int) per_page = request.args.get("per_page", Account.PER_PAGE, type=int) q = request.args.get("q") with db_session_cm() as session: search = False users_query = session.query(Account).outerjoin(Account.avatar) if q: search = True q_string = "%%%s%%" % q users_query = users_query.filter( or_(Account.cellphone.like(q_string), Account.nickname.like(q_string)) ) common_logger.debug(users_query) pagination = Pagination(found=users_query.count(), total=users_query.count(), page=page, search=search, record_name=_(u"用户"), bs_version=3) users = users_query.order_by(Account.id.desc()).offset((page - 1) * per_page).limit(per_page) context = { "users": users.all(), "pagination": pagination, "q": q } return render_template("admin/account/index.html", **context)
def validate_content(form, field): if field.data: new_keywords = field.data.strip().split(',') with db_session_cm() as session: keywords = session.query(PlanKeyword). \ filter(PlanKeyword.content.in_(new_keywords)).all() if len(keywords) > 0: raise ValidationError(_(u'关键字【%(content)s】已经存在', content=keywords[0].content))
def validate_content(form, field): if field.data: new_impresses = field.data.strip().split(',') with db_session_cm() as session: impresses = session.query(PlanKeyword). \ filter(ImpressContent.content.in_(new_impresses)).all() if len(impresses) > 0: raise ValidationError(_(u'印象【%(content)s】已经存在', content=impresses[0].content))
def plan_show(plan_id): u"""查看方案""" try: with db_session_cm() as session: plan = session.query(Plan).outerjoin(Plan.keywords).outerjoin(Plan.content).filter(Plan.id == plan_id).first() if plan: return render_template("admin/plan/show.html", plan=plan) abort(404) except Exception as e: common_logger.error(traceback.format_exc(e)) abort(500)
def is_valid_code(cls, code): u"""检测token的合法性(是否存在,是否过期)""" with db_session_cm() as session: query = session.query(Token).filter(Token.code == code) exists = query.exists() if exists: return False token = query.one() if token.is_expired: return False return True
def share_detail(plan_id): try: with db_session_cm() as session: plan = session.query(Plan).outerjoin(Plan.keywords).outerjoin(Plan.content).\ filter(Plan.status == Plan.STATUS_PUBLISH).filter(Plan.id == plan_id).one() return render_template("plan/share_detail.html", plan=plan) except NoResultFound: common_logger.warn("view not exists or unpublished plan = %s" % plan_id) abort(404) except Exception as e: common_logger.error(traceback.format_exc(e)) abort(500)
def impress_delete(impress_id): u"""删除印象""" try: with db_session_cm() as session: impress_content = session.query(ImpressContent).get(impress_id) session.delete(impress_content) session.commit() flash(_(u"删除成功!")) except Exception as e: common_logger.error(traceback.format_exc(e)) flash(_(u"删除失败!")) return redirect(url_for('admin_frontend.impresses'))
def impress_update(impress_id): u"""impress Update""" try: with db_session_cm() as session: impress_content_form = PresetImpressForm(request.form) if request.method == 'POST' and impress_content_form.validate_on_submit(): content = impress_content_form.content.data.strip() session.query(ImpressContent).filter(ImpressContent.id == impress_id).update(dict(content=content)) session.commit() return redirect(url_for('admin_frontend.impresses')) except Exception as e: common_logger.error(traceback.format_exc(e)) abort(500)
def impress_to_preset(impress_id): u"""修改印象为预设""" try: with db_session_cm() as session: impress_content = session.query(ImpressContent).get(impress_id) impress_content.type = ImpressContent.TYPE_PRESET session.add(impress_content) session.commit() flash(_(u"修改为预设成功!")) except Exception as e: common_logger.error(traceback.format_exc(e)) flash(_(u"修改为预设失败!")) return redirect(url_for('admin_frontend.impresses'))
def keyword_to_preset(keyword_id): u"""修改关键字为预设""" try: with db_session_cm() as session: keyword = session.query(PlanKeyword).get(keyword_id) keyword.type = ImpressContent.TYPE_PRESET session.add(keyword) session.commit() flash(_(u"修改为预设成功!")) except Exception as e: common_logger.error(traceback.format_exc(e)) flash(_(u"修改为预设失败!")) return redirect(url_for('admin_frontend.keywords'))
def keyword_edit(keyword_id): u"""关键之详情""" try: with db_session_cm() as session: keyword = session.query(PlanKeyword).filter(PlanKeyword.id == keyword_id).first() plan_form = PlanKeywordsForm(id=keyword.id,content = keyword.content) context = { 'form': plan_form } return render_template("admin/keyword/edit.html",**context) except Exception , e: common_logger.error(traceback.format_exc(e)) abort(500)
def comments(): u"""评论管理""" page = request.args.get("page", 1, type=int) per_page = request.args.get("per_page", PlanKeyword.PER_PAGE, type=int) with db_session_cm() as session: keywords_query = session.query(PlanKeyword) pagination = Pagination(page=page, total=keywords_query.count(), record_name=_(u"评论"), bs_version=3) keywords = keywords_query.order_by(PlanKeyword.id.desc()).offset((page - 1) * per_page).limit(per_page) context = { "keywords": keywords.all(), "pagination": pagination } return render_template("admin/comment/index.html", **context)
def keyword_update(): u"""keyword Update""" try: with db_session_cm() as session: if request.method == 'POST': plan_form = PlanKeywordsForm(request.form) keyword_id = plan_form.id.data.strip() content = plan_form.content.data.strip() session.query(PlanKeyword).filter(PlanKeyword.id == keyword_id).update(dict(content=content)) session.commit() return redirect(url_for('admin_frontend.keywords')) except Exception ,e: common_logger.error(traceback.format_exc(e)) abort(500)
def build_sample_db(): u"""初始化数据""" user_data = [ {"cellphone": 18600000000, "nickname": "admin", "email": "*****@*****.**", "password": "******", "type": Account.TYPE_ADMIN} ] with db_session_cm() as session: # init uses for ud in user_data: user = Account(ud.get("cellphone"), ud.get("password")) user.nickname = ud.get("nickname") user.email = ud.get("email") session.add(user) session.commit()
def impress_edit(impress_id): u"""编辑印象""" try: with db_session_cm() as session: impress_content = session.query(ImpressContent).filter(ImpressContent.id == impress_id).first() impress_content_form = PresetImpressForm(content=impress_content.content) context = { 'form': impress_content_form, 'impress': impress_content } return render_template("admin/impress/edit.html", **context) except Exception , e: common_logger.error(traceback.format_exc(e)) abort(500)
def account_show(account_id): u"""查看用户""" with db_session_cm() as session: account = session.query(Account).get(account_id) a_af_query = session.query(Account, AccountFriend).\ join(AccountFriend, AccountFriend.to_account_id == Account.id).\ filter(AccountFriend.from_account_id == account_id) common_logger.debug(a_af_query) results = a_af_query.all() common_logger.debug(results) return render_template("admin/account/show.html", account=account, results=results)
def impresses(): u"""印象管理""" page = request.args.get("page", 1, type=int) per_page = request.args.get("per_page", ImpressContent.PER_PAGE, type=int) with db_session_cm() as session: impresses_query = session.query(ImpressContent, func.count(Impress.id)).join(Impress.content).\ group_by(ImpressContent.id) pagination = Pagination(page=page, total=impresses_query.count(), record_name=_(u"印象"), bs_version=3) impresses_query = impresses_query.order_by(ImpressContent.id.desc()).offset((page - 1) * per_page).limit(per_page) impresses_with_count = impresses_query.all() context = { "impresses": impresses_with_count, "pagination": pagination } return render_template("admin/impress/index.html", **context)
def upload(): u"""UEditor文件上传接口 config 配置文件 result 返回结果 """ mimetype = 'application/json' result = {} action = request.args.get('action') # 解析JSON格式的配置文件 CONFIG = setting.EDITOR_CONFIG if action == 'config': # 初始化时,返回配置文件给客户端 result = CONFIG elif action in ('uploadimage', 'uploadfile', 'uploadvideo',): # 图片、文件、视频上传 if action == 'uploadimage': fieldName = CONFIG.get('imageFieldName') elif action == 'uploadvideo': fieldName = CONFIG.get('videoFieldName') else: fieldName = CONFIG.get('fileFieldName') if fieldName in request.files: try: request_file = request.files[fieldName] with db_session_cm() as session: filename = image_resources.save(request_file, folder=str(current_user.id)) irs = ImageResource(filename, current_user.id) name, suffix = os.path.splitext(request_file.filename) irs.format = suffix session.add(irs) session.commit() image = session.query(ImageResource).get(irs.id) if image is None: result['state'] = 'SUCCESS' result['url'] = '' else: url = image_resources.url(image.path) result['state'] = 'SUCCESS' result['url'] = url result['title'] = filename result = json.dumps(result) res = make_response(result) return res except Exception, e: common_logger.error(traceback.format_exc(e)) else: result['state'] = '上传接口出错'
def keyword_delete(keyword_id): u"""删除关键字""" try: with db_session_cm() as session: keyword = session.query(PlanKeyword).get(keyword_id) if current_user and current_user.is_authenticated: session.delete(keyword) session.commit() flash(_(u"删除成功!")) else: flash(_(u"没有权限!")) return redirect(url_for('admin_frontend.keywords')) except Exception as e: common_logger.error(traceback.format_exc(e)) flash(_(u"删除失败!")) return redirect(url_for('admin_frontend.keywords'))
def plan_revocation(plan_id): u"""撤销方案""" try: with db_session_cm() as session: plan = session.query(Plan).get(plan_id) if current_user and current_user.is_authenticated: plan.status = Plan.STATUS_UNPUBLISHED session.merge(plan) session.commit() flash(_(u"撤销成功!")) else: flash(_(u"没有权限!")) return redirect(url_for('admin_frontend.plans')) except Exception as e: common_logger.error(traceback.format_exc(e)) flash(_(u"失败!")) return redirect(url_for('admin_frontend.plans'))
def plan_publish(plan_id): u"""发布方案""" try: with db_session_cm() as session: plan = session.query(Plan).get(plan_id) if current_user and current_user.is_authenticated: plan.publish() session.merge(plan) session.commit() flash(_(u"发布成功!"), category="info") else: flash(_(u"没有权限!"), category="warning") return redirect(url_for('admin_frontend.plans')) except Exception as e: common_logger.error(traceback.format_exc(e)) flash(_(u"失败!"), category="danger") return redirect(url_for('admin_frontend.plans'))
def plan_new(): u"""新建方案""" plan_form = PlanForm(request.form) plan_form.keywords.choices = PlanKeyword.choices() context = { 'form': plan_form, } try: if request.method == 'POST' and plan_form.validate_on_submit(): title = plan_form.title.data.strip() content = plan_form.content.data.strip() keywords = plan_form.keywords.data with db_session_cm() as session: plan = Plan(title) plan_content = PlanContent(content=content) plan.content = plan_content u"""upload image """ request_file = request.files['image'] if request_file: filename = image_resources.save(request_file, folder=str(current_user.id)) irs = ImageResource(filename, current_user.id) name, suffix = os.path.splitext(request_file.filename) irs.format = suffix session.add(irs) session.commit() plan.cover_image_id = irs.id if current_user and current_user.is_authenticated: plan.author_id = current_user.get_id() if keywords: keywords = session.query(PlanKeyword).filter(PlanKeyword.id.in_(keywords)).all() plan.keywords = keywords session.add(plan) session.commit() flash(_(u"方案添加成功!"), category="success") return redirect(url_for('admin_frontend.plans')) return render_template("admin/plan/new.html", **context) except UploadNotAllowed as e: flash(u"封面图片格式不支持", category="warning") return render_template("admin/plan/new.html", **context) except Exception, e: common_logger.error(traceback.format_exc(e)) abort(500)
def plan_edit(plan_id): u"""修改方案""" try: with db_session_cm() as session: plan = session.query(Plan).options(subqueryload(Plan.content)).get(plan_id) plan_form = PlanForm( title=plan.title, content=plan.content and plan.content.content or "", keywords=[kw.id for kw in plan.keywords] ) plan_form.keywords.choices = PlanKeyword.choices() context = { 'form': plan_form, 'plan': plan } return render_template("admin/plan/edit.html", **context) except Exception as e: common_logger.error(traceback.format_exc(e)) abort(500)
def keyword_new(): u"""新建关键字""" try: plan_form = PlanKeywordsForm(request.form) context = { 'form': plan_form, } if request.method == 'POST' and plan_form.validate_on_submit(): content = plan_form.content.data.strip() with db_session_cm() as session: plan_keyword = PlanKeyword(content=content) plan_keyword.type = PlanKeyword.TYPE_PRESET session.add(plan_keyword) session.commit() flash(_(u"添加成功!"), category="success") return redirect(url_for('admin_frontend.keywords')) return render_template("admin/keyword/new.html", **context) except Exception, e: common_logger.error(traceback.format_exc(e)) abort(500)
def impress_new(): u"""新建印象""" try: impress_form = PresetImpressForm(request.form) context = { 'form': impress_form, } if request.method == 'POST' and impress_form.validate_on_submit(): content = impress_form.content.data.strip() with db_session_cm() as session: impress_content = ImpressContent(content=content) impress_content.type = ImpressContent.TYPE_PRESET session.add(impress_content) session.commit() flash(_(u"添加成功!"), category="success") return redirect(url_for('admin_frontend.impresses')) return render_template("admin/impress/new.html", **context) except Exception, e: common_logger.error(traceback.format_exc(e)) abort(500)
def migrate_account_friend_rel_to_account_friends(): u"""迁移 account_friends_rel_table 数据到 account_friends 表""" from xiaoli.models.relationships import account_friends_rel_table from xiaoli.models.account import AccountFriend with db_session_cm() as session: afr_q = session.query(account_friends_rel_table) for afr in afr_q: from_account_id = afr[0] to_account_id = afr[1] exists_af = session.query(AccountFriend).filter(AccountFriend.from_account_id == from_account_id).\ filter(AccountFriend.to_account_id == to_account_id).first() if not exists_af: print afr af = AccountFriend() af.from_account_id = from_account_id af.to_account_id = to_account_id session.add(af) session.commit()