コード例 #1
0
ファイル: console.py プロジェクト: allan852/xiaoli
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)
コード例 #2
0
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)
コード例 #3
0
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)
コード例 #4
0
ファイル: plan.py プロジェクト: allan852/xiaoli
 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
コード例 #5
0
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)
コード例 #6
0
ファイル: forms.py プロジェクト: allan852/xiaoli
 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))
コード例 #7
0
ファイル: forms.py プロジェクト: allan852/xiaoli
 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))
コード例 #8
0
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)
コード例 #9
0
ファイル: token.py プロジェクト: allan852/xiaoli
 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
コード例 #10
0
ファイル: plan_view.py プロジェクト: allan852/xiaoli
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)
コード例 #11
0
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'))
コード例 #12
0
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)
コード例 #13
0
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'))
コード例 #14
0
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'))
コード例 #15
0
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)
コード例 #16
0
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)
コード例 #17
0
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)
コード例 #18
0
ファイル: console.py プロジェクト: allan852/xiaoli
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()
コード例 #19
0
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)
コード例 #20
0
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)
コード例 #21
0
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)
コード例 #22
0
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'] = '上传接口出错'
コード例 #23
0
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'))
コード例 #24
0
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'))
コード例 #25
0
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'))
コード例 #26
0
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)
コード例 #27
0
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)
コード例 #28
0
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)
コード例 #29
0
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)
コード例 #30
0
ファイル: console.py プロジェクト: allan852/xiaoli
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()