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"))
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"))
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"))
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"))
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"))
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
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"))
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
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
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
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
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")
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"))
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")), ])
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