Exemplo n.º 1
0
class FavoritesEditForm(Form):
    """
    编辑 Favorites 的表单
    """

    title = TextField(_("favorites.title"),
                      description=u'标题',
                      validators=[
                          required(message=_("title is required")),
                          length(min=1,
                                 max=100,
                                 message=_("Length range: 1 - 100"))
                      ])

    tags = TextField(_("favorites.tags"),
                     description=u'标签',
                     validators=[
                         length(min=1,
                                max=512,
                                message=_("Length range: 1 - 512"))
                     ])

    description = TextField(_("favorites.description"),
                            description=u'描述',
                            validators=[
                                required(message=_("description is required")),
                            ])

    id = HiddenField()

    next = HiddenField()

    submit = SubmitField(_("Submit"))
Exemplo n.º 2
0
class MessageSendForm(Form):
    """
    新建 Message 的表单
    """

    title = TextField(_("message.title"),
                      description=u'标题',
                      validators=[
                          required(message=_("title is required")),
                          length(min=2,
                                 max=50,
                                 message=_("Length range: 2 - 50"))
                      ])

    content = TextField(_("message.content"),
                        description=u'内容',
                        validators=[
                            required(message=_("content is required")),
                            length(min=2,
                                   max=400,
                                   message=_("Length range: 2 - 400"))
                        ])

    next = HiddenField()

    submit = SubmitField(_("Submit"))
Exemplo n.º 3
0
class CommentNewForm(Form):
    """
    新建 Comment 的表单
    """

    slug = TextField(
        _("comment.slug"),
        description=u'固定地址',
        validators=[length(min=4, max=50, message=_("Length range: 4 - 50"))])

    author_id = HiddenField(_("comment.author_id"),
                            description=u'作者ID',
                            validators=[
                                required(message=_("author_id is required")),
                            ])

    comment = TextAreaField(_("comment.comment"),
                            description=u'回复内容',
                            validators=[
                                required(message=_("comment is required")),
                            ])

    def validate_slug(self, field):
        # unique
        pass

    next = HiddenField()

    submit = SubmitField(_("Add comment"))

    cancel = SubmitField(_("Cancel"))
Exemplo n.º 4
0
class MessageEditForm(Form):
    """
    编辑 Messages 的表单
    """

    title = TextField(_("message.title"),
                      description=u'标题',
                      validators=[
                          required(message=_("title is required")),
                          length(min=2,
                                 max=50,
                                 message=_("Length range: 2 - 50"))
                      ])

    sender_id = TextField(_("message.sender_id"),
                          description=u'发送人ID',
                          validators=[
                              required(message=_("sender_id is required")),
                          ])

    receiver_id = TextField(_("message.receiver_id"),
                            description=u'接收人ID',
                            validators=[
                                required(message=_("receiver_id is required")),
                            ])

    content = TextField(_("message.content"),
                        description=u'内容',
                        validators=[
                            required(message=_("content is required")),
                            length(min=2,
                                   max=400,
                                   message=_("Length range: 2 - 400"))
                        ])

    msg_status = TextField(_("message.msg_status"),
                           description=u'链接状态:0-未读、1-已读、2-已删除',
                           validators=[])

    id = HiddenField()

    next = HiddenField()

    submit = SubmitField(_("Submit"))
Exemplo n.º 5
0
class NoticeEditForm(Form):
    """
    编辑 Notice 的表单
    """

    title = TextField(_("notices.title"),
                      description=u'标题',
                      validators=[
                          required(message=_("title is required")),
                          length(min=2,
                                 max=50,
                                 message=_("Length range: 2 - 50"))
                      ])

    content = TextField(_("notices.content"),
                        description=u'内容',
                        validators=[
                            required(message=_("content is required")),
                            length(min=2,
                                   max=400,
                                   message=_("Length range: 2 - 400"))
                        ])

    deadline = TextField(_("notices.deadline"),
                         description=u'截止时间',
                         validators=[
                             required(message=_("deadline is required")),
                         ])

    notice_status = SelectField(_("notices.notice_status"),
                                description=u'状态:0-未发布、1-发布、2-已删除',
                                choices=[
                                    ('0', _(u"未发布")),
                                    ('1', _(u"发布")),
                                    ('2', _(u"已删除")),
                                ],
                                validators=[])

    id = HiddenField()

    next = HiddenField()

    submit = SubmitField(_("Submit"))
Exemplo n.º 6
0
class WordForbiddenNewForm(Form):
    """
    新建 WordsForbidden 的表单
    """

    word = TextField(_("words_forbidden.word"),
                     description=u'关键词',
                     validators=[
                         required(message=_("word is required")),
                         length(min=1,
                                max=100,
                                message=_("Length range: 1 - 100"))
                     ])

    word_group = RadioField(_("words_forbidden.word_group"),
                            default='0',
                            choices=[('0', _("sensitive")), ('1', _("advert")),
                                     ('2', _("spam")), ('3', _("sex"))],
                            description=u'分组:0-敏感词、1-广告词、2-灌水词、3-色情词',
                            validators=[
                                required(message=_("word_group is required")),
                            ])

    word_type = RadioField(_("words_forbidden.word_type"),
                           default='0',
                           choices=[('0', _("contain")), ('1', _("equal")),
                                    ('2', _("regex"))],
                           description=u'类型:0-包含、1-相同、2-正则',
                           validators=[
                               required(message=_("word_type is required")),
                           ])

    process_type = RadioField(
        _("words_forbidden.process_type"),
        default='0',
        choices=[('0', _("replace")), ('1', _("check pending"))],
        description=u'类型:0-替换、1-待审',
        validators=[
            required(message=_("process_type is required")),
        ])

    def validate_word(self, field):
        # unique
        pass
Exemplo n.º 7
0
class RecoverPasswordForm(Form):
    """
    取回密码
    """
    email = TextField(_("Your email address"),
                      validators=[
                          required(message=_("email is required")),
                          length(min=1,
                                 max=100,
                                 message=_("Length range: 1 - 100")),
                          email(message=_("A valid email address is required"))
                      ])

    #def validate_email(self, field):
    # email是否存在
    #    if User.check_email_valid(field.data):
    #        raise ValidationError, gettext("This email is not exist")

    submit = SubmitField(_("Find password"))
Exemplo n.º 8
0
class WordReservedEditForm(Form):
    """
    编辑 WordsReserved 的表单
    """

    word = TextField(_("words_reserved.word"),
                description=u'关键词',
                validators=[
                    required(message=_("word is required")),
                    length(min=1, max=100, message=_("Length range: 1 - 100"))
            ])

    word_type = RadioField(_("words_reserved.word_type"),
        choices=[('0', _("contain")), ('1', _("equal"))],
        description=u'类型:0-包含、1-相同',
        validators=[
            required(message=_("word_type is required")),
            ])
    
    def validate_word(self, field):
        # unique
        pass
Exemplo n.º 9
0
class LinkNewForm(Form):
    """
    新建 Links 的表单
    """

    link_group = SelectField(_("link.link_group"),
                             description=u'分组:0-合作伙伴、1-友情链接、2-其他链接',
                             choices=[('0', _("Partner link")),
                                      ('1', _("Friend link")),
                                      ('2', _("Other link"))],
                             validators=[
                                 required(message=_("link_group is required")),
                             ])

    title = TextField(_("link.title"),
                      description=u'标题',
                      validators=[
                          required(message=_("title is required")),
                          length(min=2,
                                 max=50,
                                 message=_("Length range: 2 - 50"))
                      ])

    weight = IntegerField(_("link.weight"),
                          description=u'权重',
                          default=1,
                          validators=[
                              required(message=_("weight is required")),
                              NumberRange(min=1,
                                          max=1000,
                                          message=_("weight range: 0 - 1000"))
                          ])

    link = TextField(_("link.link"),
                     description=u'链接',
                     validators=[
                         url(message=_("link is not a valid URL")),
                         required(message=_("link is required")),
                         length(min=11,
                                max=100,
                                message=_("Length range: 11 - 100"))
                     ])

    logo = TextField(_("link.logo"),
                     description=u'图标',
                     validators=[
                         url(message=_("logo is not a valid URL")),
                         length(min=11,
                                max=100,
                                message=_("Length range: 11 - 100"))
                     ])

    email = TextField(_("link.email"),
                      description=u'邮箱',
                      validators=[
                          email(message=_("email is not a valid email")),
                          length(min=6,
                                 max=50,
                                 message=_("Length range: 6 - 50"))
                      ])

    link_status = SelectField(_("link.link_status"),
                              description=u'链接状态:0-草稿、1-待审核、2-已发布',
                              choices=[('0', u'草稿'), ('1', u'待审'),
                                       ('2', u'发布')],
                              validators=[])

    desc = TextField(_("link.desc"),
                     description=u'备注',
                     validators=[
                         length(min=1,
                                max=200,
                                message=_("Length range: 1 - 200"))
                     ])

    def validate_link(self, field):
        # unique
        pass
Exemplo n.º 10
0
class TagEditForm(Form):
    """
    编辑 Tags 的表单
    """

    tag_name = TextField(_("tag.tag_name"),
                         description=u'标签名',
                         validators=[
                             required(message=_("tag_name is required")),
                             length(min=1,
                                    max=50,
                                    message=_("Length range: 1 - 50"))
                         ])

    slug = TextField(_("tag.slug"),
                     description=u'固定地址',
                     validators=[
                         required(message=_("slug is required")),
                         length(min=1,
                                max=50,
                                message=_("Length range: 1 - 50"))
                     ])

    logo = TextField(_("tag.logo"),
                     description=u'图标',
                     validators=[
                         url(message=_("logo is not a valid URL")),
                         length(min=11,
                                max=100,
                                message=_("Length range: 11 - 100"))
                     ])

    feature_image = TextField(_("tag.feature_image"),
                              description=u'特色图地址',
                              validators=[
                                  url(message=_("logo is not a valid URL")),
                                  length(min=11,
                                         max=100,
                                         message=_("Length range: 11 - 100"))
                              ])

    description = TextField(_("tag.description"),
                            description=u'描述',
                            validators=[])

    meta_title = TextField(
        _("tag.meta_title"),
        description=u'针对搜索引擎设置的标题',
        validators=[length(max=100, message=_("Length max: 100"))])

    meta_keywords = TextField(
        _("tag.meta_keywords"),
        description=u'针对搜索引擎设置的关键词',
        validators=[length(max=200, message=_("Length max: 200"))])

    meta_description = TextField(
        _("tag.meta_description"),
        description=u'针对搜索引擎设置的描述',
        validators=[length(max=200, message=_("Length max: 200"))])

    def validate_tag_name(self, field):
        # unique
        pass

    def validate_slug(self, field):
        # unique
        pass
Exemplo n.º 11
0
class CategoryNewForm(Form):
    """
    新建 Category 的表单
    """

    parent_id = HiddenField(_("category.parent_id"),
                            description=u'父ID',
                            validators=[])

    category_name = TextField(
        _("category.category_name"),
        description=u'分类名',
        validators=[
            required(message=_("category_name is required")),
            length(min=1, max=50, message=_("Length range: 1 - 50"))
        ])

    slug = TextField(_("category.slug"),
                     description=u'固定地址',
                     validators=[
                         required(message=_("slug is required")),
                         length(min=1,
                                max=50,
                                message=_("Length range: 1 - 50"))
                     ])

    logo = TextField(_("category.logo"),
                     description=u'图标',
                     validators=[
                         url(message=_("logo is not a valid URL")),
                         length(min=1,
                                max=100,
                                message=_("Length range: 1 - 100"))
                     ])

    feature_image = TextField(_("category.feature_image"),
                              description=u'特色图地址',
                              validators=[
                                  url(message=_("logo is not a valid URL")),
                                  length(min=1,
                                         max=100,
                                         message=_("Length range: 1 - 100"))
                              ])

    entry_type = RadioField(_("entry.entry_type"),
                            description=u'类型:分类中不再有类型,不想改动数据库,暂留此字段',
                            default='-1',
                            choices=[('-1', _("Mixed"))],
                            validators=[
                                required(message=_("entry_type is required")),
                            ])

    # 浏览权限 (仅限制栏目里的文档浏览权限)
    #     是否隐藏栏目(显示、隐藏)
    show_role = RadioField(_("category.show_role"),
                           default='0',
                           choices=[('0', _("all")), ('10', _("member")),
                                    ('11', _("enthusiast")),
                                    ('12', _("mainstay")), ('13', _("senior")),
                                    ('100', _("partner")),
                                    ('1000', _("editor")),
                                    ('2000', _("moderator")),
                                    ('10000', _("supervisor")),
                                    ('10100', _("administrator"))],
                           description=u'能查看的角色:0-不限',
                           validators=[
                               required(message=_("word_group is required")),
                           ])

    # 是否支持投稿(不支持、支持)
    post_role = RadioField(_("category.post_role"),
                           default='0',
                           choices=[('0', _("all")), ('10', _("member")),
                                    ('11', _("enthusiast")),
                                    ('12', _("mainstay")), ('13', _("senior")),
                                    ('100', _("partner")),
                                    ('1000', _("editor")),
                                    ('2000', _("moderator")),
                                    ('10000', _("supervisor")),
                                    ('10100', _("administrator"))],
                           description=u'能投稿的角色:0-不限',
                           validators=[
                               required(message=_("word_group is required")),
                           ])

    # 栏目列表选项:
    #     链接到默认页
    #     链接到列表第一页
    #     使用动态页
    list_template = TextField(
        _("category.list_template"),
        default='/public/',
        description=u'列表页模板',
        validators=[
            required(message=_("list_template is required")),
            length(min=1, max=100, message=_("Length range: 1 - 100"))
        ])

    create_template = TextField(
        _("category.create_template"),
        default='/create.html',
        description=u'创建页模板',
        validators=[
            required(message=_("create_template is required")),
            length(min=1, max=100, message=_("Length range: 1 - 100"))
        ])

    edit_template = TextField(
        _("category.edit_template"),
        default='/edit.html',
        description=u'编辑页模板',
        validators=[
            required(message=_("edit_template is required")),
            length(min=1, max=100, message=_("Length range: 1 - 100"))
        ])

    show_template = TextField(
        _("category.show_template"),
        default='/public/',
        description=u'显示页模板',
        validators=[
            required(message=_("show_template is required")),
            length(min=1, max=100, message=_("Length range: 1 - 100"))
        ])

    search_template = TextField(
        _("category.search_template"),
        default='/public/search.html',
        description=u'搜索结果页模板',
        validators=[
            required(message=_("search_template is required")),
            length(min=1, max=100, message=_("Length range: 1 - 100"))
        ])

    description = TextField(_("category.description"),
                            description=u'描述',
                            validators=[])

    display_order = TextField(
        _("category.display_order"),
        default='0',
        description=u'显示次序',
        validators=[
            required(message=_("display_order is required")),
        ])

    meta_title = TextField(
        _("category.meta_title"),
        description=u'针对搜索引擎设置的标题',
        validators=[length(max=100, message=_("Length max: 100"))])

    meta_keywords = TextField(
        _("category.meta_keywords"),
        description=u'针对搜索引擎设置的关键词',
        validators=[length(max=200, message=_("Length max: 200"))])

    meta_description = TextField(
        _("category.meta_description"),
        description=u'针对搜索引擎设置的描述',
        validators=[length(max=200, message=_("Length max: 200"))])

    entry_url_rule = TextField(
        _("category.entry_url_rule"),
        default='/archives/{title_id}',
        description=u'文章编码规则',
        validators=[length(max=100, message=_("Length max: 100"))])

    def validate_category_name(self, field):
        # unique
        pass

    def validate_slug(self, field):
        # unique
        pass
Exemplo n.º 12
0
class SignupForm(Form):
    """
    注册的表单
    """
    username = TextField(
        _("Username"),
        #validators=[length(min=3, max=20, message=_("Length range: 3 - 20")), is_username])
        validators=[length(min=2, max=20, message=_("Length range: 3 - 20"))])

    password = PasswordField(
        _("Password"), validators=[required(message=_("Password required"))])

    password_again = PasswordField(
        _("Password again"),
        validators=[equal_to("password", message=_("Passwords don't match"))])

    email = TextField(_("Login email address"),
                      validators=[
                          required(message=_("Email address required")),
                          email(message=_("A valid email address is required"))
                      ])

    gender = SelectField(_("user.gender"),
                         description=u'性别:0-保密、1-男、2-女',
                         choices=[('0', u'保密'), ('1', u'男'), ('2', u'女')],
                         default=1,
                         validators=[
                             required(message=_("gender is required")),
                         ])

    recaptcha = TextField(
        _("Recaptcha"),
        validators=[required(message=_("You must provide an captcha"))])

    next = HiddenField()

    submit = SubmitField(_("Signup"))

    def validate_username(self, field):
        # todo
        # 用户名不允许重复
        if UserService.count_by_username(field.data) > 0:
            raise ValidationError, gettext("This username is taken")

        # 不能有敏感词、保留词
        if not WordReservedService.word_allowed(field.data):
            raise ValidationError, gettext("This username is taken")

        if not WordForbiddenService.word_allowed(field.data):
            raise ValidationError, gettext("This username is taken")

    def validate_nickname(self, field):
        #        # 昵称不允许重复
        #        if not UserService.count_by_nickname(field.data):
        #            raise ValidationError, gettext("This nickname is taken")

        if not WordReservedService.word_allowed(field.data):
            raise ValidationError, gettext("This nickname is taken")

        if not WordForbiddenService.word_allowed(field.data):
            raise ValidationError, gettext("This nickname is taken")

    def validate_email(self, field):
        # email不允许重复
        if UserService.count_by_email(field.data) > 0:
            raise ValidationError, gettext("This email is taken")

    def validate_recaptcha(self, field):
        if 'need_verify' not in session or not session['need_verify']:
            return

        if 'verify' not in session or session['verify'] != str(
                field.data).upper():
            raise ValidationError, gettext("This captcha is not matching")
Exemplo n.º 13
0
class PeopleEditForm(Form):
    """
    编辑 账户 的表单
    """

    nickname = TextField(_("user.nickname"),
                         description=u'昵称',
                         validators=[
                             required(message=_("nickname is required")),
                             length(min=2,
                                    max=20,
                                    message=_("Length range: 2 - 20"))
                         ])

    homepage = TextField(_("user.homepage"),
                         description=u'个人主页',
                         validators=[
                             url(message=_("homepage is not a valid URL")),
                             length(min=0,
                                    max=50,
                                    message=_("Length range: 11 - 50"))
                         ])

    avatar = TextField(
        _("user.avatar"),
        description=u'头像',
        validators=[
            #url(message=_("avatar is not a valid URL")),
            length(min=0, max=50, message=_("Length range: 11 - 50"))
        ])

    gender = SelectField(_("user.gender"),
                         description=u'性别:0-保密、1-男、2-女',
                         choices=[('0', u'保密'), ('1', u'男'), ('2', u'女')],
                         validators=[
                             required(message=_("gender is required")),
                         ])

    bio = TextAreaField(_("user.bio"),
                        description=u'自我介绍',
                        validators=[
                            length(min=0,
                                   max=200,
                                   message=_("Length range: 1 - 200"))
                        ])

    interest = TextAreaField(_("user.interest"),
                             description=u'研究领域/兴趣范围(多个用,分开)',
                             validators=[])

    def validate_nickname(self, field):
        # todo
        #        # 昵称不允许重复
        #        if not UserService.count_by_nickname(field.data):
        #            raise ValidationError, gettext("This nickname is taken")
        if not WordReservedService.word_allowed(field.data):
            raise ValidationError, gettext("This nickname is taken")

    id = HiddenField()

    next = HiddenField()

    submit = SubmitField(_("Submit"))
Exemplo n.º 14
0
class EntryEditForm(Form):
    """
    编辑 Entry 的表单
    """

    title = TextField(_("entry.title"),
                      description=u'标题',
                      validators=[
                          required(message=_("title is required")),
                          length(min=1,
                                 max=100,
                                 message=_("Length range: 1 - 100"))
                      ])

    source_type = SelectField(
        _("entry.source_type"),
        default=0,
        description=u'来源类型:0-原创、1-翻译、2-转帖',
        choices=[('0', _("Original content")), ('1', _("Translate content")),
                 ('2', _("Reprint content"))],
        validators=[
            required(message=_("source_type is required")),
        ])

    source_title = TextField(_("entry.source_title"),
                             description=u'来源标题',
                             validators=[
                                 length(min=1,
                                        max=100,
                                        message=_("Length range: 1 - 100"))
                             ])

    source_url = TextField(_("entry.source_url"),
                           description=u'来源地址',
                           validators=[
                               url(message=_("source_url is not a valid URL")),
                               length(min=11,
                                      max=200,
                                      message=_("Length range: 11 - 200"))
                           ])

    logo = TextField(_("entry.logo"),
                     description=u'图标',
                     validators=[
                         url(message=_("logo is not a valid URL")),
                         length(min=11,
                                max=100,
                                message=_("Length range: 11 - 100"))
                     ])

    feature_image = TextField(
        _("entry.feature_image"),
        description=u'特色图地址',
        validators=[
            url(message=_("feature_image is not a valid URL")),
            length(min=11, max=200, message=_("Length range: 11 - 200"))
        ])

    content = TextAreaField(_("entry.content"),
                            description=u'内容',
                            validators=[
                                required(message=_("content is required")),
                            ])

    summary = TextAreaField(_("entry.summary"),
                            description=u'摘要',
                            validators=[
                                length(min=1,
                                       max=200,
                                       message=_("Length range: 1 - 200"))
                            ])

    on_portal = SelectField(_("entry.on_portal"),
                            default=0,
                            choices=[('0', u'否'), ('1', u'是')],
                            description=u'是否首页显示',
                            validators=[
                                required(message=_("on_portal is required")),
                            ])

    on_top = SelectField(_("entry.on_top"),
                         default=0,
                         choices=[('0', u'否'), ('1', u'是')],
                         description=u'是否置顶',
                         validators=[
                             required(message=_("on_top is required")),
                         ])

    comment_status = SelectField(
        _("entry.comment_status"),
        default=0,
        description=u'评论状态:0-允许、1-关闭',
        choices=[('0', u'允许'), ('1', u'关闭')],
        validators=[
            required(message=_("comment_status is required")),
        ])

    entry_status = SelectField(
        _("entry.entry_status"),
        default=0,
        description=u'内容状态:0-草稿、1-待审、2-已删除、3-发布、4-已接受',
        choices=[('0', u'草稿'), ('1', u'待审'), ('2', u'已删除'), ('3', u'发布')],
        validators=[
            required(message=_("entry_status is required")),
        ])

    view_status = SelectField(
        _("entry.view_status"),
        default=0,
        description=u'显示状态:0-公开、1-私有、2-仅作者可见、3-隐藏',
        choices=[('0', u'公开'), ('1', u'私有'), ('2', u'仅作者可见'), ('3', u'隐藏')],
        validators=[
            required(message=_("view_status is required")),
        ])

    scores = SelectField(_("entry.scores"),
                         default=0,
                         description=u'分数',
                         choices=[('0', u'未知'), ('1', u'1'), ('2', u'2'),
                                  ('3', u'2'), ('4', u'2'), ('5', u'2')],
                         validators=[
                             required(message=_("scores is required")),
                         ])

    difficulty = SelectField(_("entry.difficulty"),
                             default=0,
                             description=u'深浅度',
                             choices=[('0', u'容易'), ('1', u'一般'), ('2', u'难'),
                                      ('3', u'高深')],
                             validators=[
                                 required(message=_("difficulty is required")),
                             ])

    recommend = SelectField(_("entry.recommend"),
                            default=0,
                            description=u'推荐级别:0-默认(未推荐)、1-不错、2-良好、3-精华',
                            choices=[('0', u'未推荐'), ('1', u'不错'), ('2', u'良好'),
                                     ('3', u'精华')],
                            validators=[
                                required(message=_("recommend is required")),
                            ])

    on_portal = SelectField(_("entry.on_portal"),
                            default=0,
                            description=u'是否首页显示',
                            choices=[('0', u'否'), ('1', u'是')],
                            validators=[
                                required(message=_("view_status is required")),
                            ])

    #阅读权限:
    #     是否隐藏栏目(显示、隐藏)
    show_role = RadioField(_("entry.show_role"),
                           default='0',
                           choices=[('0', _("all")), ('10', _("member")),
                                    ('11', _("enthusiast")),
                                    ('12', _("mainstay")), ('13', _("senior")),
                                    ('100', _("partner")),
                                    ('1000', _("editor")),
                                    ('2000', _("moderator")),
                                    ('10000', _("supervisor")),
                                    ('10100', _("administrator"))],
                           description=u'能查看的角色:0-不限',
                           validators=[
                               required(message=_("word_group is required")),
                           ])
Exemplo n.º 15
0
class EntryEditFormOld(Form):
    """
    编辑 Entry 的表单
    """

    entry_type = SelectField(
        _("entry.entry_type"),
        default=0,
        description=
        u'类型:0-文章、1-快讯、2-代码、3-软件、4-讨论、5-问答、6-小贴士、7-图集、8-视频、9-音频、10-链接、11-引语、12-状态、13-文档、14-聊天、15-随笔',
        choices=[('0', _("Article")), ('1', _("News")), ('2', _("Code")),
                 ('3', _("Software")), ('4', _("Forum")), ('5', _("Question")),
                 ('6', _("Tips")), ('7', _("Gallery")), ('8', _("Video")),
                 ('9', _("Audio")), ('10', _("Link")), ('11', _("Quote")),
                 ('12', _("Status")), ('13', _("Document")), ('14', _("Chat")),
                 ('15', _("Aside")), ('16', _("Special"))],
        validators=[
            required(message=_("entry_type is required")),
        ])

    title = TextField(_("entry.title"),
                      description=u'标题',
                      validators=[
                          required(message=_("title is required")),
                          length(min=1,
                                 max=100,
                                 message=_("Length range: 1 - 100"))
                      ])

    slug = TextField(
        _("entry.slug"),
        description=u'固定地址',
        validators=[length(min=1, max=50, message=_("Length range: 1 - 50"))])

    source_type = SelectField(
        _("entry.source_type"),
        default=0,
        description=u'来源类型:0-原创、1-翻译、2-转帖',
        choices=[('0', _("Original content")), ('1', _("Translate content")),
                 ('2', _("Reprint content"))],
        validators=[
            required(message=_("source_type is required")),
        ])

    source_title = TextField(_("entry.source_title"),
                             description=u'来源标题',
                             validators=[
                                 length(min=1,
                                        max=100,
                                        message=_("Length range: 1 - 100"))
                             ])

    source_url = TextField(_("entry.source_url"),
                           description=u'来源地址',
                           validators=[
                               url(message=_("source_url is not a valid URL")),
                               length(min=11,
                                      max=200,
                                      message=_("Length range: 11 - 200"))
                           ])

    category_id = HiddenField(
        _("entry.category_id"),
        description=u'分类ID:0-未分类',
        validators=[
            required(message=_("category_id is required")),
        ])

    logo = TextField(_("entry.logo"),
                     description=u'图标',
                     validators=[
                         url(message=_("logo is not a valid URL")),
                         length(min=11,
                                max=100,
                                message=_("Length range: 11 - 100"))
                     ])

    feature_image = TextField(
        _("entry.feature_image"),
        description=u'特色图地址',
        validators=[
            url(message=_("feature_image is not a valid URL")),
            length(min=11, max=200, message=_("Length range: 11 - 200"))
        ])

    tags = TextField(_("entry.tags"),
                     description=u'标签',
                     validators=[
                         length(min=1,
                                max=512,
                                message=_("Length range: 1 - 512"))
                     ])

    content = TextAreaField(_("entry.content"),
                            description=u'内容',
                            validators=[
                                required(message=_("content is required")),
                            ])

    summary = TextAreaField(_("entry.summary"),
                            description=u'摘要',
                            validators=[
                                length(min=1,
                                       max=200,
                                       message=_("Length range: 1 - 200"))
                            ])

    on_portal = SelectField(_("entry.on_portal"),
                            default=0,
                            choices=[('0', u'否'), ('1', u'是')],
                            description=u'是否首页显示',
                            validators=[
                                required(message=_("on_portal is required")),
                            ])

    on_top = SelectField(_("entry.on_top"),
                         default=0,
                         choices=[('0', u'否'), ('1', u'是')],
                         description=u'是否置顶',
                         validators=[
                             required(message=_("on_top is required")),
                         ])

    comment_status = SelectField(
        _("entry.comment_status"),
        default=0,
        description=u'评论状态:0-允许、1-关闭',
        choices=[('0', u'允许'), ('1', u'关闭')],
        validators=[
            required(message=_("comment_status is required")),
        ])

    entry_status = SelectField(
        _("entry.entry_status"),
        default=0,
        description=u'内容状态:0-草稿、1-待审、2-发布',
        choices=[('0', u'草稿'), ('1', u'待审'), ('2', u'发布')],
        validators=[
            required(message=_("entry_status is required")),
        ])

    view_status = SelectField(
        _("entry.view_status"),
        default=0,
        description=u'显示状态:0-公开、1-私有、2-隐藏',
        choices=[('0', u'公开'), ('1', u'私有'), ('2', u'隐藏')],
        validators=[
            required(message=_("view_status is required")),
        ])

    scores = SelectField(_("entry.scores"),
                         default=0,
                         description=u'分数',
                         choices=[('0', u'未知'), ('1', u'1'), ('2', u'2'),
                                  ('3', u'2'), ('4', u'2'), ('5', u'2')],
                         validators=[
                             required(message=_("scores is required")),
                         ])

    difficulty = SelectField(_("entry.difficulty"),
                             default=0,
                             description=u'深浅度',
                             choices=[('0', u'容易'), ('1', u'一般'), ('2', u'难'),
                                      ('3', u'高深')],
                             validators=[
                                 required(message=_("difficulty is required")),
                             ])

    recommend = SelectField(_("entry.recommend"),
                            default=0,
                            description=u'推荐级别:0-默认(未推荐)、1-不错、2-良好、3-精华',
                            choices=[('0', u'未推荐'), ('1', u'不错'), ('2', u'良好'),
                                     ('3', u'精华')],
                            validators=[
                                required(message=_("recommend is required")),
                            ])
    principal_language = SelectField(
        _("entry.principal_language"),
        default=0,
        description=
        u'主体语言:1-Java 、    2-C/C++    3-Objective-C    4-PHP    5-Perl    6-Python    7-Ruby    8-C#    9-.NET    10-ASP    11-D语言    12-Groovy    13-Scala    14-JavaScript    15-HTML/CSS    16-ActionScript    17-VBScript    18-Delphi/Pascal    19-Basic    20-ErLang    21-COBOL    22-Fortran    23-Lua    24-SHELL    25-Smalltalk    26-汇编    27-Sliverlight    28-Lisp    29-Google Go',
        choices=[('0', u'其他'), ('1', u'Java'), ('2', u'C/C++'),
                 ('3', u'Objective-C'), ('4', u'PHP'), ('5', u'Perl'),
                 ('6', u'Python'),
                 ('7', u'Ruby'), ('8', u'C#'), ('9', u'.NET'), ('10', u'ASP'),
                 ('11', u'D语言'), ('12', u'Groovy'), ('13', u'Scala'),
                 ('14', u'JavaScript'), ('15', u'HTML/CSS'),
                 ('16', u'ActionScript'), ('17', u'VBScript'),
                 ('18', u'Delphi/Pascal'), ('19', u'Basic'), ('20', u'ErLang'),
                 ('21', u'COBOL'), ('22', u'Fortran'), ('23', u'Lua'),
                 ('24', u'SHELL'), ('25', u'Smalltalk'), ('26', u'汇编'),
                 ('27', u'Sliverlight'), ('28', u'Lisp'),
                 ('29', u'Google Go')],
        validators=[
            required(message=_("recommend is required")),
        ])

    license_agreement = SelectField(
        _("entry.license_agreement"),
        default=0,
        description=
        u'授权协议:1-GPL,2-LGPL,3-AGPL,4-Apache,5-MIT,6-BSD,7-EPL,8-MPL,0-其他',
        choices=[('0', u'其他'), ('1', u'GPL'), ('2', u'LGPL'), ('3', u'AGPL'),
                 ('4', u'Apache'), ('5', u'MIT'), ('6', u'BSD'), ('7', u'EPL'),
                 ('8', u'MPL')],
        validators=[
            required(message=_("recommend is required")),
        ])

    runtime_platform = SelectField(
        _("entry.runtime_platform"),
        default=0,
        description=
        u'运行平台: 1-Windows,2-Linux,3-BSD,4-UNIX,5-OS X,6-Symbian,7-J2ME,8-嵌入式,9-Android,10-iPhone/iPad/iPod,11-Windows Phone/Mobile,12-Meego,13-Moblin',
        choices=[('1', u'Windows'), ('2', u'Linux'), ('3', u'BSD'),
                 ('4', u'UNIX'), ('5', u'OS X'), ('6', u'Symbian'),
                 ('7', u'J2ME'), ('8', u'嵌入式'), ('9', u'Android'),
                 ('10', u'iPhone/iPad/iPod'), ('11', u'Windows Phone/Mobile'),
                 ('12', u'Meego'), ('13', u'Moblin')],
        validators=[
            required(message=_("recommend is required")),
        ])

    #文章排序:(置顶周期)		标题样式:
    scores = SelectField(_("entry.scores"),
                         default=0,
                         description=u'是否置顶',
                         choices=[('0', u'否'), ('1', u'是')],
                         validators=[
                             required(message=_("view_status is required")),
                         ])

    on_top_period = SelectField(
        _("entry.on_top_period"),
        default=7,
        description=u'置顶周期',
        choices=[('7', u'一周'), ('15', u'15天'), ('30', u'30天'), ('60', u'60天'),
                 ('90', u'90天')],
        validators=[
            required(message=_("on_top_period is required")),
        ])

    on_portal = SelectField(_("entry.on_portal"),
                            default=0,
                            description=u'是否首页显示',
                            choices=[('0', u'否'), ('1', u'是')],
                            validators=[
                                required(message=_("view_status is required")),
                            ])

    on_portal_period = SelectField(
        _("entry.on_portal_period"),
        default=7,
        description=u'首页显示周期',
        choices=[('7', u'一周'), ('15', u'15天'), ('30', u'30天'), ('60', u'60天'),
                 ('90', u'90天')],
        validators=[
            required(message=_("on_top_period is required")),
        ])

    #阅读权限:
    #     是否隐藏栏目(显示、隐藏)
    show_role = RadioField(_("entry.show_role"),
                           default='0',
                           choices=[('0', _("all")), ('10', _("member")),
                                    ('11', _("enthusiast")),
                                    ('12', _("mainstay")), ('13', _("senior")),
                                    ('100', _("partner")),
                                    ('1000', _("editor")),
                                    ('2000', _("moderator")),
                                    ('10000', _("supervisor")),
                                    ('10100', _("administrator"))],
                           description=u'能查看的角色:0-不限',
                           validators=[
                               required(message=_("word_group is required")),
                           ])

    #消费金币/银币
    consume_gold_cost = IntegerField(_("entry.consume_gold_cost"),
                                     default=0,
                                     description=u'消费金牌数',
                                     validators=[])

    consume_silver_cost = IntegerField(_("entry.consume_silver_cost"),
                                       default=0,
                                       description=u'消费银牌数',
                                       validators=[])

    #赏金金币/银币
    reward_gold_cost = IntegerField(_("entry.reward_gold_cost"),
                                    default=0,
                                    description=u'赏金(金牌)',
                                    validators=[])

    reward_silver_cost = IntegerField(_("entry.reward_silver_cost"),
                                      default=0,
                                      description=u'赏金(银牌)',
                                      validators=[])

    published_time = DateTimeField(
        _("entry.published_time"),
        default=sys_now(),
        description=u'发布时间',
        validators=[
            required(message=_("published_time is required")),
        ])

    def validate_slug(self, field):
        # unique
        if len(field.data) > 50:
            raise ValidationError, _("Slug must be less than 50 characters")

        #        slug = slugify(field.data) if field.data else slugify(self.title.data)[:50]
        #        posts = Posts.query.filter_by(slug=slug)
        #        if self.posts:
        #            posts = posts.filter(db.not_(Posts.id==self.posts.id))
        #        if posts.count():
        #            error = gettext("This slug is taken") if field.data else gettext("Slug is required")
        #            raise ValidationError, error
        pass

    def validate_tags(self, field):
        # 最多8个tag
        # 每个tag最长20个字符
        pass