Пример #1
1
class SignupForm(FlaskForm):
    """The signup form"""
    email = StringField('Email Address', [
        validators.data_required(),
        validators.Length(min=6, max=35),
        validators.email(message="Invalid email address"),
        validators.regexp(
            r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)",
            flags=0,
            message="Invalid email address")
    ])
    username = StringField('Username', [
        validators.data_required(),
        validators.Length(min=3, max=25),
        validators.regexp(r"(^[a-zA-Z _.+-]+$)",
                          message="Only text characters allowed for username.")
    ])
    password = PasswordField('New Password', [
        validators.input_required(),
        validators.EqualTo('confirm', message='Passwords must match'),
        validators.length(
            min=8, message='Password needs to be atleast 8 characters long')
    ])
    confirm = PasswordField('Confirm Password', [validators.data_required()])
    submit = SubmitField("Submit")
Пример #2
0
class BookingForm(FlaskForm):
    name = StringField(
        label='Вас зовут',
        validators=[
            validators.DataRequired(message='Введите имя'),
            validators.regexp(
                r'[a-zA-Zа-яА-ЯёЁ]{2,}',
                message='Поле может содержать только буквы русского\
                         и английского алфавита должно быть не короче\
                         двух символов')
        ])
    phone = StringField(
        label='Ваш телефон',
        validators=[
            validators.input_required(message='123'),
            validators.regexp(
                r'[0-9\+]{3,}',
                message='Поле должно быть не короче трех символов,\
                         может содержать только цифры и знак "+"')
        ])
    day = StringField(label='День')
    time = StringField(label='Время')
    teacher = IntegerField(label='ID учителя',
                           validators=[
                               validators.NumberRange(
                                   min=0,
                                   max=len(data.teachers) - 1,
                                   message='Значение вне диапазона')
                           ])
Пример #3
0
class RequestForm(FlaskForm):
    goal = RadioField(
        label='Какая цель занятий?',
        validators=[
            validators.input_required(message='Выберите цель занятий')
        ],
        choices=[(i['goal'], i['description']) for i in data.goals])
    time = RadioField(label='Сколько времени есть?',
                      validators=[
                          validators.input_required(
                              message='Выберите количество свободного времени')
                      ],
                      choices=[('1-2', '1-2 часа в неделю'),
                               ('3-5', '3-5 часов в неделю'),
                               ('5-7', '5-7 часов в неделю'),
                               ('7-10', '7-10 часа в неделю')])
    name = StringField(
        label='Вас зовут',
        validators=[
            validators.input_required(message='123'),
            validators.regexp(
                r'[a-zA-Zа-яА-ЯёЁ]{2,}',
                message='Поле может содержать только буквы русского\
                         и английского алфавита должно быть не короче\
                         двух символов')
        ])
    phone = StringField(
        label='Ваш телефон',
        validators=[
            validators.input_required(message='123'),
            validators.regexp(
                r'[0-9\+]{3,}',
                message='Поле должно быть не короче трех символов,\
                         может содержать только цифры и знак "+"')
        ])
Пример #4
0
class SignUpForm(BaseForm):
    telephone = StringField(validators=[
        InputRequired(message='请输入手机号码'),
        regexp(r'1[345789]\d{9}', message='请输入正确的手机号码')
    ])
    sms_captcha = StringField(
        validators=[regexp(r'\w{4}', message='请输入正确格式的短信验证码')])
    username = StringField(
        validators=[regexp(r'.{2,20}', message='请输入正确格式的用户名')])
    password1 = StringField(
        validators=[regexp(r'[0-9a-zA-Z_\.]{6,20}', message='请输入正确格式的密码!')])
    password2 = StringField(
        validators=[EqualTo('password1', message='两次输入的密码不一致')])
    graph_captcha = StringField(
        validators=[regexp(r'\w{4}', message='图形验证码格式不正确')])

    def validate_sms_captcha(self, field):
        sms_captcha = field.data.strip()
        telephone = self.telephone.data.strip()
        sms_captcha_cache = cache.get(telephone)
        if not sms_captcha_cache or sms_captcha_cache.lower(
        ) != sms_captcha.lower():
            raise ValidationError(message='短信验证码不正确')

    def validate_graph_captcha(self, field):
        graph_captcha = field.data.strip()
        graph_captcha_cache = cache.get(graph_captcha)
        if not graph_captcha_cache:
            raise ValidationError(message='图形验证码错误')
Пример #5
0
class SMSCaptchaForm(BaseForm):
    # 短信验证码,加密验证
    salt = 'dsafdauiyqorhqsafsdio'
    telephone = StringField(validators=[regexp(r'1[345789]\d{9}')])
    timestamp = StringField(validators=[regexp(r'\d{13}')])
    sign = StringField(validators=[InputRequired()])

    def validate(self):
        # 验证方法
        result = super(SMSCaptchaForm, self).validate()
        if not result:
            return False

        telephone = self.telephone.data
        timestamp = self.timestamp.data
        sign = self.sign.data

        # md5(timestamp+telephone+salt)
        # md5函数必须要传递bytes类型字符串
        sk = (timestamp + telephone + self.salt).encode('utf-8')
        # hashlib.md5(sk) 生成md5对象 .hexdigest()获取字符串内容
        sign2 = hashlib.md5(sk).hexdigest()
        if sign == sign2:
            return True
        else:
            return False
Пример #6
0
class SignupForm(BaseForm):
    telephone = StringField(
        validators=[regexp(r'1[345789]\d{9}', message='请输入正确格式的手机号!')])
    sms_captcha = StringField(
        validators=[regexp(r'\w{4}', message='请输入正确格式的手机验证码!')])
    username = StringField(
        validators=[regexp(r'.{2,20}', message='用户名长度应该在2至20位之间!')])
    password1 = StringField(validators=[
        regexp(r'[0-9a-zA-Z\._]{6,20}', message='密码长度应该在6至20位之间!')
    ])
    password2 = StringField(
        validators=[EqualTo('password1', message='两次输入密码不一致!')])
    graph_captcha = StringField(
        validators=[regexp(r'\w{4}', message='请输入正确格式的图形验证码!')])

    def validate_sms_captcha(self, field):
        sms_captcha = field.data
        telephone = self.telephone.data
        if sms_captcha != '1111':
            sms_captcha_mem = zlcache.get(telephone)
            if not sms_captcha_mem or sms_captcha_mem.lower(
            ) != sms_captcha.lower():
                raise ValidationError(message='短信验证码输入错误!')

    def validate_graph_captcha(self, field):
        graph_captcha = field.data
        if graph_captcha != '1111':
            graph_captcha_mem = zlcache.get(graph_captcha.lower())
            if not graph_captcha_mem:
                raise ValidationError(message='图形验证码输入错误!')
Пример #7
0
class Channel(FlaskForm):
    """
    Channel - Input Field

    Input Field to manager a channel

    Attributes:
        channel_name: String Input for the name of the channel
        stream_url: String Input for the mp3 URL
        online_radio_box: String Input for the Onlineradiobox link

    """
    channel_name = StringField(
        "Channel Name",
        validators=[validators.InputRequired(message="Cannot be empty")])
    stream_url = StringField("Url of the radio",
                             validators=[
                                 validators.regexp(
                                     "^http[s]{0,1}\\:.*",
                                     message="Please enter a valid URL")
                             ])
    online_radio_box = StringField("Url for Online Radio Box",
                                   validators=[
                                       validators.regexp(
                                           "^http[s]{0,1}\\:.*",
                                           message="Please enter a valid URL")
                                   ])
Пример #8
0
 def validate_filename(form, field):
     if field.data and not session['editing'] == 'True':
         field.data = secure_filename(re.sub(r'[^()a-z0-9_.-]', '_', str(field.data).lower()))
         field.data = session['type_of'] + field.data
         validators.regexp(r'^[^/\\]\.%s$' % joined)
         if os.path.exists(os.path.join('static/', IMAGE_FOLDER, field.data)):
             ValidationError('This file exists already!')
Пример #9
0
class ShortenURL(FlaskForm):
    original_url = StringField('Enter URL',
                               validators=[
                                   Length(min=1, max=9999),
                                   DataRequired(),
                                   regexp(url_regex, message='Invalid URL.')
                               ])
    custom_link = StringField('Custom alias (optional)',
                              validators=[
                                  regexp(custom_link_regex,
                                         message='You can only enter letters, '
                                         'numbers and dashes.')
                              ])
    submit = SubmitField('Shorten URL')

    def validate_custom_link(self, custom_link):
        link = Link.query.filter_by(link=custom_link.data).first()
        if link:
            raise ValidationError('Custom link already taken.')

        length = len(custom_link.data)
        if length != 0:
            if length < 3 or length > 16:
                raise ValidationError(
                    'Field must be between 3 and 16 characters long.')
Пример #10
0
class RecordForm(BaseForm):
    id = StringField(
        label='Record id',
        render_kw={'readonly': ''},
    )
    doi = StringField(
        label='DOI (Digital Object Identifier)',
        validators=[regexp('^$|' + DOI_REGEX)],
    )
    sid = StringField(
        label='SID (Secondary Identifier)',
        validators=[regexp('^$|' + SID_REGEX)],
    )
    collection_id = SelectField(
        label='Collection',
        validators=[input_required()],
    )
    schema_id = SelectField(
        label='Schema',
        validators=[input_required()],
    )
    metadata = JSONTextField(
        label='Metadata',
        validators=[input_required(), json_object],
        render_kw={'rows': 24},
    )

    def validate_sid(self, field):
        if not self.doi.data and not field.data:
            raise ValidationError('SID is required if there is no DOI.')
Пример #11
0
class SMSCaptchaForm(BoseForm):
    salt ='12#dfdsaddddp'
    telephone = StringField(validators=[regexp(r'1[345789]\d{9}')])
    timestamp = StringField(validators=[regexp(r'\d{13}')])#时间戳
    sign = StringField(validators=[InputRequired()])

    def validate(self):
        result = super(SMSCaptchaForm,self).validate()
        if not result:
            return False
        telephone = self.telephone.data
        timestamp = self.timestamp.data
        sign = self.sign.data
        user = FrontUser.query.filter_by(telephone=telephone).first()
        # print('+++++++++++++++++++++')
        # print(type(user.telephone))
        # print('++++++++++++++++++')
        #md5(timestamp+telephone+salt)
        #md5函数必须要传一个bytes类型的字符串进去
        sign2 = hashlib.md5((timestamp+telephone+self.salt).encode('utf-8')).hexdigest()
        if user != None:
            return 1
        elif sign == sign2:
            return 2
        else:
            return False
Пример #12
0
class SMSCaptchaForm(BaseForm):
    """
    手机短信验证码的封装,防止黑客或者高手仿照地址栏上的url发送短信
    通过一些干扰信息将手机号和验证码更好的封装,
    后台和前台要商量好加密机制,双方经过同样的加密机制,得到相同的字符串才能发送短信
    比如使用md5加密让手机号码和时间戳和盐变量组合在一起,返回一个加了密的字符串
    """
    salt = "347tgfreuydx9384t5rei3458923"
    telephone = StringField(validators=[regexp(r"1[345789]\d{9}")])
    timestamp = StringField(validators=[regexp(r"\d{13}")])
    sign = StringField(validators=[DataRequired()])

    def validate(self):
        result = super().validate()
        if not result:
            return False
        telephone = self.telephone.data
        timestamp = self.timestamp.data
        sign = self.sign.data

        # md5(telephone+timestamp+sign)
        # md5函数必须传递一个bytes类型的字符串进去
        sign2 = hashlib.md5(
            (timestamp + telephone + self.salt).encode("utf-8")).hexdigest()
        if sign2 == sign:
            return True
        else:
            return False
Пример #13
0
class StudentForm(FlaskForm):
    id = HiddenField()

    faculty = StringField("Факультет: ", [
        validators.DataRequired("Це поле є обов'язковим"),
        validators.Length(2, 15, "Довжина має бути від 2 до 15 символів")
    ])

    group = StringField("Група: ", [
        validators.DataRequired("Це поле є обов'язковим"),
        validators.regexp('[A-Z][A-Z]-[0-9][0-9]')
    ])

    name = StringField("Ім'я: ", [
        validators.DataRequired("Це поле є обов'язковим"),
        validators.Length(3, 15, "Ім'я має містити від 3 до 15 символів")
    ])

    surname = StringField("Прізвище: ", [
        validators.DataRequired("Це поле є обов'язковим"),
        validators.Length(3, 15, "Прізвище має містити від 3 до 15 символів")
    ])

    username = StringField("Юзернейм: ", [
        validators.DataRequired("Це поле є обов'язковим"),
        validators.Length(3, 36, "Юзернейм має містити від 3 до 36 символів"),
        validators.regexp('@([A-Z]|[a-z]|_)*')
    ])

    submit = SubmitField("Save")
Пример #14
0
class SMSCaptchaForm(BaseForm):
    salt = 'q3423805gdflvbdfvhsdoa`#$%'
    telephone = StringField(validators=[regexp(r'1[345789]\d{9}')])
    timestamp = StringField(validators=[regexp(r'\d{13}')])
    sign = StringField(validators=[InputRequired()])

    def validate_telephone(self, field):
        telephone = field.data
        # try:
        if FrontUser.query.filter_by(telephone=telephone).first():
            print(telephone)
            raise ValidationError(message='此手机号已经注册!')

    def validate(self):
        result = super(SMSCaptchaForm, self).validate()
        if not result:
            return False

        telephone = self.telephone.data
        timestamp = self.timestamp.data
        sign = self.sign.data

        # md5(timestamp+telphone+salt)
        # md5函数必须要传一个bytes类型的字符串进去
        sign2 = hashlib.md5(
            (timestamp + telephone + self.salt).encode('utf-8')).hexdigest()
        # print('客户端提交的sign:',sign)
        # print('服务器生成的sign:',sign2)
        if sign == sign2:
            return True
        else:
            return False
Пример #15
0
class SMSCaptchaForm(BaseForm):
    salt = 'q3423805gdflvbdfvhsdoa`#$%'  #盐是随便给的
    telephone = StringField(validators=[regexp(r'1[345789]\d{9}')])
    timestamp = StringField(validators=[regexp(r'\d{13}')])
    sign = StringField(validators=[InputRequired()])  #Md5值

    def validate(self):
        result = super(SMSCaptchaForm, self).validate()
        if not result:
            return False

        telephone = self.telephone.data
        timestamp = self.timestamp.data
        sign = self.sign.data

        # md5(timestamp+telphone+salt)
        # md5函数必须要传一个bytes类型的字符串进去
        sign2 = hashlib.md5(
            (timestamp + telephone + self.salt).encode('utf-8')).hexdigest()
        print('客户端提交的sign:', sign)
        print('服务器生成的sign:', sign2)
        if sign == sign2:
            return True
        else:
            return False
Пример #16
0
class SMSCaptchaForm(BaseForm):
    salt = 'qewr234234werjk;adsfkd;sfka'
    telephone = StringField(validators=[regexp(r'1[345789]\d{9}')])
    # 时间戳:ms单位,一共有13位
    timestamp = StringField(validators=[regexp(r'\d{13}')])
    sign = StringField(validators=[InputRequired()])

    # 重写验证函数
    def validate(self):
        # result = super(SMSCaptchaForm, self).validate()
        result = super().validate()
        # 1. 先执行父类的验证器
        if not result:
            return False

        # 2. 拿到表单的telephone、timestamp、sign值
        telephone = self.telephone.data
        timestamp = self.timestamp.data
        sign = self.sign.data

        # md5(timestamp+telephone+salt)
        # md5函数必须要传一个bytes类型的字符串进去
        # unicode转bytes用encode('utf-8')
        sign2 = hashlib.md5(
            (timestamp + telephone +
             self.salt).encode('utf-8')).hexdigest()  # hexdigest反函数,获取对象中的字符串
        # print('客户端提交的sign:', sign)
        # print('服务器生成的sign2:', sign2)
        if sign == sign2:
            return True
        else:
            return False
Пример #17
0
class SigninForm(BaseForm):
    telephone = StringField(
        validators=[regexp(r'1[345789]\d{9}', message='请输入正确格式的手机号!')])
    password = StringField(validators=[
        regexp(r'[0-9a-zA-Z\._]{6,20}', message='密码长度应该在6至20位之间!')
    ])
    remember = StringField()
Пример #18
0
class RegistrationForm(FlaskForm):

    email = EmailField('이메일',
                       validators=[
                           DataRequired(message='빈칸을 채워주세요'),
                           Length(min=6, max=30),
                           Email(message='이메일형태가 아닙니다')
                       ])
    password = PasswordField(
        '비밀번호',
        validators=[
            DataRequired(message='빈칸을 채워주세요'),
            Length(min=8, message='최소 8자리로 해주세요'),
            EqualTo('password_check', '비밀번호가 일치하지 않습니다'),
            regexp('^(?=.*[a-zA-Z])(?=.*[!@#$%^~*+=-])(?=.*[0-9]).{8,20}$',
                   message='특수문자와 숫자를 넣어주세요')
        ])
    password_check = PasswordField(
        '비밀번호 확인', validators=[DataRequired(message='빈칸을 채워주세요')])
    username = StringField('사용자 이름',
                           validators=[
                               DataRequired(message='빈칸을 채워주세요'),
                               Length(min=2, max=25,
                                      message='길이는 2-25자로 해주세요'),
                               regexp(regex='^[가-힣a-zA-Z]+$',
                                      message='한국어나 영어로만 써주세요')
                           ])
Пример #19
0
class ClinicForm(Form):
    name = StringField('Name', [validators.required()])
    physical_address = StringField('Physical Address', [validators.required()])
    start_time = StringField(
        'Opening Time',
        default="09:00",
        validators=[
            validators.required(),
            validators.regexp(
                regex="(24:00|2[0-3]:[0-5][0-9]|[0-1][0-9]:[0-5][0-9])",
                message=
                "Please input a valid time in the correct format, Example: 11:00"
            )
        ])
    end_time = StringField(
        'Closing Time',
        default="17:00",
        validators=[
            validators.required(),
            validators.regexp(
                regex="(24:00|2[0-3]:[0-5][0-9]|[0-1][0-9]:[0-5][0-9])",
                message=
                "Please input a valid time in the correct format, Example: 11:00"
            )
        ])
    rooms = StringField('Number of Rooms', [validators.required(), room_valid])
    doctors = ChosenSelectMultipleField("Doctors", coerce=int)
    nurses = ChosenSelectMultipleField("Nurses", coerce=int)
Пример #20
0
class NewMatchForm(FlaskForm):
    season = StringField("Kausi", [validators.regexp('[0-9]+', 0, "Kaudet numeroitu")])
    hometeam = StringField("Kotijoukkue", [validators.regexp('[ÅÄÖA-Z][ÅÄÖA-Z][0-9]', 0, "Tunnuksessa on kaksi isoa kirjainta ja numero")])
    visitteam = StringField("Vierasjoukkue", [validators.regexp('[ÅÄÖA-Z]{2}[0-9]', 0, "Tunnuksessa on kaksi isoa kirjainta ja numero")])

    class Meta:
        csrf = False
Пример #21
0
class RegistrationForm(FlaskForm):
  student_number = StringField('Student Number', validators=[DataRequired(), regexp('^\d{8}$', message='must be 8 digits')])
  prefered_name = StringField('Prefered Name', validators=[])
  pin =PasswordField('Current Pin',validators=[regexp('^\d{4}$',message='must be four digits')],default='0000')
  new_pin = PasswordField('New Pin', validators=[regexp('^\d{4}$', message='must be four digits')])
  new_pin2 = PasswordField('Confirm Pin', validators=[EqualTo('new_pin')])
  submit = SubmitField('Sign up')
Пример #22
0
class Register_user_form(FlaskForm):
    register_user_id = StringField(
        '用户id',
        render_kw={'placeholder': '由6位0-9整数组成'},
        validators=[
            DataRequired(),
            regexp(regex=user_id_regex, flags=0, message='用户id必须为6位整数')
        ]
    )
    register_user_name = StringField(
        '姓名',
        render_kw={'placeholder': '2-10位中文组成'},
        validators=[
            DataRequired(),
            regexp(regex=user_name_regex, flags=0, message='姓名必须为中文2到10位')
        ]
    )
    register_user_password = PasswordField(
        '密码',
        render_kw={'placeholder': '数字或英文6-12位组成'},
        validators=[
            DataRequired(),
            regexp(regex=user_password_regex, flags=0, message='密码必须为数字或英文6到12位')
        ]
    )
    register_user_password_confirm = PasswordField(
        '确认密码',
        validators=[
            DataRequired(),
            EqualTo('register_user_password', message='两次输入密码必须一致')
        ]
    )
    register_submit = SubmitField('注册')
Пример #23
0
class WorkstudySearchForm(Form):
    student_id = IntegerField('studentID', validators=[validators.optional()])
    faculty_id = StringField(
        'facultyID',
        validators=[validators.optional(),
                    validators.regexp('[A-Za-z]{2}')])
    term_season = StringField(
        'semesterTerm',
        validators=[
            validators.optional(),
            validators.regexp('(?i)^fall|spring|summer|winter$')
        ])
    term_year = IntegerField('termYear',
                             validators=[
                                 validators.optional(),
                                 validators.number_range(1950, 2100)
                             ])
    status = StringField(
        'applicationDecision',
        validators=[
            validators.optional(),
            validators.regexp('(?i)^accepted|pending|refused|revoked$')
        ])

    #This method MUST ONLY be called after verification.
    def get_search_form_data(self):
        # Dictionary, whose keys have non-empty (or filled) values
        filled_dict = {
            k: v
            for k, v in self.data.iteritems()
            if not (v == "" or v == "None" or v is None)
        }
        return filled_dict
Пример #24
0
class SignupForm(BaseFrom):
    telephone = StringField(
        validators=[regexp(r'1[3578]\d{9}', message="请输入正确格式手机号码")])
    sms_captcha = StringField(
        validators=[regexp(r"\w{4}", message="请输入正确格式验证码")])
    username = StringField(
        validators=[regexp(r'.{2,20}', message="请输入正确格式用户名")])
    password = StringField(
        validators=[regexp(r'[0-9a-zA-Z_\.]{6,20}', message="请输入正确格式密码")])
    password2 = StringField(
        validators=[EqualTo("password", message="两次输入密码不一致")])
    graph_captcha = StringField(
        validators=[regexp(r"\w{4}", message="请输入正确格式的图片验证码")])

    def validate_sms_captcha(self, field):
        if field.data != "1111":
            sms_captcha = field.data
            telephone = self.telephone.data
            sms_captcha_mem = zlcache.get(telephone)
            if not sms_captcha_mem or sms_captcha.lower(
            ) != sms_captcha_mem.lower():
                raise ValidationError(message="短信验证码错误")

    def validate_graph_captcha(self, field):
        if field.data != "1111":
            graph_captcha = field.data
            graph_captcha_mem = zlcache.get(graph_captcha.lower())
            if not graph_captcha_mem:
                raise ValidationError("图形验证码错误")
Пример #25
0
class TimeMatchForm(FlaskForm):
    season = StringField("Kausi", [validators.regexp('[0-9]+', 0, "Kaudet numeroitu")])
    gamedate = DateTimeLocalField(label="Pelipäivä ja aika", format='%Y-%m-%dT%H:%M', validators=[validators.InputRequired()])
    hometeam = StringField("Kotijoukkue", [validators.regexp('[ÅÄÖA-Z][ÅÄÖA-Z][0-9]', 0, "Tunnuksessa on kaksi isoa kirjainta ja numero")])
    visitteam = StringField("Vierasjoukkue", [validators.regexp('[ÅÄÖA-Z]{2}[0-9]', 0, "Tunnuksessa on kaksi isoa kirjainta ja numero")])

    class Meta:
        csrf = False
Пример #26
0
class LoginForm(BaseForm):
    telephone = StringField(validators=[
        InputRequired(message='请输入手机号码'),
        regexp(r'1[345789]\d{9}', message='请输入正确的手机号码')
    ])
    password = StringField(
        validators=[regexp(r'[0-9a-zA-Z_\.]{6,20}', message='请输入正确格式的密码!')])
    remember = StringField()
Пример #27
0
class NameMixin(BaseForm):
    name = fields.TextField(_('Name'), [
        validators.Length(max=FIELD_MAXLENGTH, message=_("Field cannot be longer than %(max)d characters.")),
        validators.regexp(utils.NAME_LASTNAME_REGEXP, message=_(
            "Name invalid. Use only letters and numbers."))])
    last_name = fields.TextField(_('Last Name'), [
        validators.Length(max=FIELD_MAXLENGTH, message=_("Field cannot be longer than %(max)d characters.")),
        validators.regexp(utils.NAME_LASTNAME_REGEXP, message=_(
            "Last Name invalid. Use only letters and numbers."))])
Пример #28
0
def test_regex_raises(re_pattern, re_flags, test_v, dummy_form, dummy_field):
    """
    Regex should raise ValidationError if there is no match
    Should work for complie regex too
    """
    validator = regexp(re_pattern,
                       re_flags) if re_flags else regexp(re_pattern)
    dummy_field.data = test_v
    with pytest.raises(ValidationError):
        validator(dummy_form, dummy_field)
Пример #29
0
def test_regex_passes(re_pattern, re_flags, test_v, expected_v, dummy_form,
                      dummy_field):
    """
    Regex should pass if there is a match.
    Should work for complie regex too
    """
    validator = regexp(re_pattern,
                       re_flags) if re_flags else regexp(re_pattern)
    dummy_field.data = test_v
    assert validator(dummy_form, dummy_field).group(0) == expected_v
Пример #30
0
    def test_regexp(self):
        import re
        # String regexp
        self.assertEqual(regexp('^a')(self.form, DummyField('abcd')), None)
        self.assertEqual(
            regexp('^a', re.I)(self.form, DummyField('ABcd')), None)
        self.assertRaises(ValidationError, regexp('^a'), self.form,
                          DummyField('foo'))
        self.assertRaises(ValidationError, regexp('^a'), self.form,
                          DummyField(None))
        # Compiled regexp
        self.assertEqual(
            regexp(re.compile('^a'))(self.form, DummyField('abcd')), None)
        self.assertEqual(
            regexp(re.compile('^a', re.I))(self.form, DummyField('ABcd')),
            None)
        self.assertRaises(ValidationError, regexp(re.compile('^a')), self.form,
                          DummyField('foo'))
        self.assertRaises(ValidationError, regexp(re.compile('^a')), self.form,
                          DummyField(None))

        # Check custom message
        self.assertEqual(
            grab_error_message(regexp('^a', message='foo'), self.form,
                               DummyField('f')), 'foo')
Пример #31
0
def test_lazy_proxy_fixture(really_lazy_proxy):
    """
    Tests that the validators support lazy translation strings for messages.
    """
    equal_to("fieldname", message=really_lazy_proxy)
    length(min=1, message=really_lazy_proxy)
    NumberRange(1, 5, message=really_lazy_proxy)
    data_required(message=really_lazy_proxy)
    regexp(".+", message=really_lazy_proxy)
    email(message=really_lazy_proxy)
    ip_address(message=really_lazy_proxy)
    url(message=really_lazy_proxy)
Пример #32
0
    def test_regexp(self):
        import re
        # String regexp
        self.assertEqual(regexp('^a')(self.form, DummyField('abcd')), None)
        self.assertEqual(regexp('^a', re.I)(self.form, DummyField('ABcd')), None)
        self.assertRaises(ValidationError, regexp('^a'), self.form, DummyField('foo'))
        self.assertRaises(ValidationError, regexp('^a'), self.form, DummyField(None))
        # Compiled regexp
        self.assertEqual(regexp(re.compile('^a'))(self.form, DummyField('abcd')), None)
        self.assertEqual(regexp(re.compile('^a', re.I))(self.form, DummyField('ABcd')), None)
        self.assertRaises(ValidationError, regexp(re.compile('^a')), self.form, DummyField('foo'))
        self.assertRaises(ValidationError, regexp(re.compile('^a')), self.form, DummyField(None))

        # Check custom message
        self.assertEqual(grab_error_message(regexp('^a', message='foo'), self.form, DummyField('f')), 'foo')
Пример #33
0
 def test_regexp(self):
     import re
     # String regexp
     self.assertEqual(regexp('^a')(self.form, DummyField('abcd')), None)
     self.assertEqual(regexp('^a', re.I)(self.form, DummyField('ABcd')), None)
     self.assertRaises(ValidationError, regexp('^a'), self.form, DummyField('foo'))
     self.assertRaises(ValidationError, regexp('^a'), self.form, DummyField(None))
     # Compiled regexp
     self.assertEqual(regexp(re.compile('^a'))(self.form, DummyField('abcd')), None)
     self.assertEqual(regexp(re.compile('^a', re.I))(self.form, DummyField('ABcd')), None)
     self.assertRaises(ValidationError, regexp(re.compile('^a')), self.form, DummyField('foo'))
     self.assertRaises(ValidationError, regexp(re.compile('^a')), self.form, DummyField(None))
Пример #34
0
    def test_regexp(self):
        import re

        # String regexp
        self.assertEqual(regexp("^a")(self.form, DummyField("abcd")), None)
        self.assertEqual(regexp("^a", re.I)(self.form, DummyField("ABcd")), None)
        self.assertRaises(ValidationError, regexp("^a"), self.form, DummyField("foo"))
        self.assertRaises(ValidationError, regexp("^a"), self.form, DummyField(None))
        # Compiled regexp
        self.assertEqual(regexp(re.compile("^a"))(self.form, DummyField("abcd")), None)
        self.assertEqual(regexp(re.compile("^a", re.I))(self.form, DummyField("ABcd")), None)
        self.assertRaises(ValidationError, regexp(re.compile("^a")), self.form, DummyField("foo"))
        self.assertRaises(ValidationError, regexp(re.compile("^a")), self.form, DummyField(None))
Пример #35
0
    def test_lazy_proxy(self):
        """Tests that the validators support lazy translation strings for messages."""

        class ReallyLazyProxy(object):
            def __unicode__(self):
                raise Exception('Translator function called during form declaration: it should be called at response time.')
            __str__ = __unicode__

        message = ReallyLazyProxy()
        self.assertRaises(Exception, str, message)
        self.assertRaises(Exception, text_type, message)
        self.assertTrue(equal_to('fieldname', message=message))
        self.assertTrue(length(min=1, message=message))
        self.assertTrue(NumberRange(1, 5, message=message))
        self.assertTrue(required(message=message))
        self.assertTrue(regexp('.+', message=message))
        self.assertTrue(email(message=message))
        self.assertTrue(ip_address(message=message))
        self.assertTrue(url(message=message))
Пример #36
0
 def Regexp(cls, regex, flags=0, message=None):
     ''' Validates the field against a user provided regexp. '''
     return validators.regexp(regex, flags, message)
Пример #37
0
from wtforms import validators
from flask.globals import session
from wtforms.validators import ValidationError

def csrfCheck(self, field):
    if not session.has_key('csrf_token'):
        raise ValidationError('csrf validation error')
    sessionid = session['csrf_token']
    if not sessionid == field.data:
        raise ValidationError('csrf validation error')

def optional(validator):
    return [validators.Optional()] + validator
credentialTypes = ['password', 'facebook']
credErr = '"credentialType: Invalid value, must be one of: {0}."'.format(", ".join(credentialTypes))

credentialValidator = [validators.AnyOf(values=credentialTypes)]
userNameValidator = [validators.Length(min=4, max=250)]
passwordValidator = [validators.Length(min=8),
                     validators.Regexp(".*[a-z].*", message="password should contain lowercase"),
                     validators.Regexp(".*[A-Z].*", message="password should contain uppercase"),
                     validators.Regexp(".*[0-9].*", message="password should contain digit")]
secretValidator = [validators.Length(min=8),
                     validators.Regexp(".*[a-z].*", message="password should contain lowercase"),
                     validators.Regexp(".*[0-9].*", message="password should contain digit")]
emailValidator = [validators.Email()]
digestValidator = [validators.Length(min=512, max=512), validators.regexp("[0-9A-Fa-f]*")]
assuranceValidator = [validators.Length(min=4, max=50)]
csrfValidator = [csrfCheck]
Пример #38
0
# -*- coding: utf-8 -*-
from flask_wtf import Form
from flask_login import current_user
from wtforms import StringField, BooleanField, SubmitField, SelectField, TextAreaField, RadioField
from wtforms.validators import DataRequired, Length, ValidationError, regexp, Optional

from .models import User, Role

USERNAME_RE = r'^[\u4e00-\u9fa5_A-Za-z][\u4e00-\u9fa5_a-zA-Z0-9.]+$'
is_username = regexp(USERNAME_RE,
                     message=u"用户名由中文,字母,数字,点或下划线组成,且首字母只能是中文或字母")


class EditProfileForm(Form):
    username = StringField(u'用户名', validators=[DataRequired(message=""), Length(1, 64), is_username])
    gender = SelectField(u'性别', validators=[Optional()], choices=[('', ''), (u'男', u'男'), (u'女', u'女')])
    signature = StringField(u'个性签名', validators=[Length(1, 100)])
    about_me = TextAreaField(u'个人简介')
    submit = SubmitField(u'提交')

    # TODO: There should have an interval of changing username
    def validate_username(self, field):
        if field.data != current_user.username and User.query.filter_by(username=field.data).first():
            raise ValidationError(u'用户名已存在')


class EditProfileAdiminForm(Form):
    """The form is used for management"""
    username = StringField(u"用户名", validators=[DataRequired(message=""), Length(1, 64), is_username])
    confirmed = BooleanField(u'邮箱验证')
    role = SelectField(u'角色', coerce=int)
Пример #39
0
    secretShouldContainDigit, credentialTypeString

credentialTypes = ['password', 'facebook', 'certificate']

credErr = '"{0}: {1}: {2}."'.format(credentialTypeString,credErrString, ", ".join(credentialTypes))

def csrfCheck(self, field):
    if 'csrf_token' not in session:
        raise ValidationError('csrf validation error')
    sessionid = session['csrf_token']
    if not sessionid == field.data:
        raise ValidationError('csrf validation error')

def optional(validator):
    return [validators.Optional(strip_whitespace=False)] + validator


credentialValidator = [validators.AnyOf(values=credentialTypes)]
userNameValidator = [validators.Length(min=4, max=250)]
passwordValidator = [validators.Length(min=8),
                     validators.Regexp(".*[a-z].*", message=passwordShouldContainLowercase),
                     validators.Regexp(".*[A-Z].*", message=passwordShouldContainUppercase),
                     validators.Regexp(".*[0-9].*", message=passwordShouldContainDigit)]
secretValidator = [validators.Length(min=8),
                     validators.Regexp("(?s).*[a-z].*", message=secretShouldContainLowercase),
                     validators.Regexp("(?s).*[0-9].*", message=secretShouldContainDigit)]
emailValidator = [validators.Email()]
digestValidator = [validators.Length(min=128, max=128), validators.regexp("[0-9A-Fa-f]*")]
assuranceValidator = [validators.Length(min=4, max=50)]
csrfValidator = [csrfCheck]
Пример #40
0
import re
import unidecode

from datetime import datetime

from wtforms.validators import regexp

is_name = regexp(
    # not using \w since it allows for unlimited underscores
    r'^[a-zA-Z0-9]+([ \-\_][a-zA-Z0-9]+)*$',
    message='Field characters can only be letters and digits with one space, \
            underscore or hyphen as separator.'
)


def slugify(now, str):
    """Return slug genereated from date and specified unicoded string."""
    date = datetime.date(now)
    unistr = unidecode.unidecode(str).lower()
    title = re.sub(r'\W+', '-', unistr).strip('-')
    return '%i/%i/%i/%s' % (date.year, date.month, date.day, title)
Пример #41
0
    :copyright: (c) 2013 by the FlaskBB Team.
    :license: BSD, see LICENSE for more details.
"""
from flask.ext.wtf import Form
from wtforms import (TextField, PasswordField, DateField, TextAreaField,
                     SelectField, ValidationError)
from wtforms.validators import (Length, Required, Email, EqualTo, regexp,
                                Optional, URL)

from flaskbb.user.models import User
from flaskbb.extensions import db
from flaskbb.helpers import SelectDateWidget

IMG_RE = r'^[^/\\]\.(?:jpg|gif|png)'

is_image = regexp(IMG_RE,
                  message=("Only jpg, jpeg, png and gifs are allowed!"))


class ChangeEmailForm(Form):
    old_email = TextField("Old E-Mail Address", validators=[
        Required(message="Email adress required"),
        Email(message="This email is invalid")])

    new_email = TextField("New E-Mail Address", validators=[
        Required(message="Email adress required"),
        Email(message="This email is invalid")])

    confirm_new_email = TextField("Confirm E-Mail Address", validators=[
        Required(message="Email adress required"),
        Email(message="This email is invalid"),
        EqualTo("new_email", message="E-Mails do not match")])
Пример #42
0
# -*- coding: utf-8 -*-
import datetime

from flask_wtf import Form, RecaptchaField
from wtforms import (StringField, SelectField, BooleanField, HiddenField,
                     SubmitField, Field)
from wtforms.validators import (DataRequired, InputRequired, Email, EqualTo,
                                regexp, ValidationError)

IPADDRESS_RE = r'((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))'
is_ipadd = regexp(IPADDRESS_RE, message='ip address error')
COPAY_PER_PAGE = 20


class AddMachineForm(Form):
    startip = StringField(u'开始IP', validators=[DataRequired(message=u"必填的"), ])
    endip = StringField(u'结束IP', validators=[DataRequired(message=u"必填的"), is_ipadd])
    option = SelectField(u'操作', default="on", choices=[
        ("on", u'开机'),
        ("soft", u'关机'),
        ("reset", u'重启')])
    submit = SubmitField(u'提交')

    # def validate_startip(self, field):
    #     if not is_ipadd:
    #         raise ValidationError('ip address error')
    #
    # def validate_endip(self, field):
    #     if not is_ipadd:
    #         raise ValidationError('ip address error')
    #     end_ips = [int(f) for f in field.data.split('.')]
Пример #43
0
from wtforms import fields, validators
from common import form


UserNameField = lambda: fields.TextField(u"Username",
        [validators.required(), validators.regexp('[-a-zA-Z0-9]+'), validators.length(max=256)])


class RegisterForm(form.Form):
    username = UserNameField()
    password = fields.PasswordField(u"Password", [validators.required()])
Пример #44
0
from wtforms import Form
from wtforms import validators
from webapp2_extras.i18n import lazy_gettext as _
from webapp2_extras.i18n import ngettext, gettext
from bp_includes.lib import utils
from custom_validators import AnyOfList


FIELD_MAXLENGTH = 50  # intended to stop maliciously long input
PHONE_MAXLENGTH = 15
TAGS = {'TAG1', 'TAG2', 'TAG3'}

NAME_FIELD_VALIDATORS = [validators.DataRequired(),
                         validators.Length(max=FIELD_MAXLENGTH,
                                           message=_("Field cannot be longer than %(max)d characters.")),
                         validators.regexp(utils.NAME_LASTNAME_REGEXP,
                                           message=_("Name invalid. Use only letters and numbers."))]
EMAIL_FIELD_VALIDATORS = [validators.Length(min=0, max=FIELD_MAXLENGTH, message=_(
                              "Field must be between %(min)d and %(max)d characters long.")),
                          validators.regexp(utils.EMAIL_REGEXP, message=_('Invalid email address.'))]
PHONE_FIELD_VALIDATORS = [validators.length(max=PHONE_MAXLENGTH,
                                            message=_('Phone invalid. Should be less than %(max)s '
                                                      'character long.'))]
WEBSITE_FIELD_VALIDATORS = [validators.Length(max=FIELD_MAXLENGTH,
                                              message=_('Field cannot be longer than %(max)d characters.'))]
NOTES_FIELD_VALIDATORS = [validators.Length(max=65536)]
PASSWORD_FIELD_VALIDATORS = [validators.DataRequired(),
                             validators.Length(max=FIELD_MAXLENGTH, message=_(
                                 "Field cannot be longer than %(max)d characters."))]
TAG_FIELD_VALIDATORS = [validators.Required()]
PRICE_FIELD_VALIDATORS = [validators.NumberRange(min=0.0)]
Пример #45
0
"""
from flask_wtf import FlaskForm
from wtforms import (StringField, PasswordField, BooleanField, HiddenField,
                     SubmitField, SelectField)
from wtforms.validators import (DataRequired, InputRequired, Email, EqualTo,
                                regexp, ValidationError)
from flask_babelplus import lazy_gettext as _

from flaskbb.user.models import User
from flaskbb.utils.settings import flaskbb_config
from flaskbb.utils.helpers import time_utcnow
from flaskbb.utils.fields import RecaptchaField

USERNAME_RE = r'^[\w.+-]+$'
is_valid_username = regexp(
    USERNAME_RE, message=_("You can only use letters, numbers or dashes.")
)


class LoginForm(FlaskForm):
    login = StringField(_("Username or Email address"), validators=[
        DataRequired(message=_("Please enter your username or email address."))
    ])

    password = PasswordField(_("Password"), validators=[
        DataRequired(message=_("Please enter your password."))])

    remember_me = BooleanField(_("Remember me"), default=False)

    submit = SubmitField(_("Login"))
Пример #46
0
# -*- coding: utf-8 -*- 
from wtforms import TextField, PasswordField, BooleanField,\
         SubmitField, validators, TextAreaField, HiddenField, \
         ValidationError, FileField
from wtforms.validators import required, url, equal_to, email,optional,regexp
from flask.ext.wtf import Form
from flask.ext.wtf.file import FileField, file_required, file_allowed
from app import db
from app.models.account import User


USERNAME_RE = r'^[\w.+-]+$'
is_username = regexp(USERNAME_RE, message=u"你只能使用字符,数字和下划线")

################################################################################
#
# Form for account
#
################################################################################
class LoginForm(Form):
    next = HiddenField()
    remember = BooleanField("Remember me in this computer")
    login = TextField("Account: ", validators=[ required(message=\
                               "you must input valid username")])
    password = PasswordField("Password: "******"Login")


class UserForm(Form):
    username = TextField(u"用户名", validators=[
                         required(message=u"用户名是必须的"), 
Пример #47
0
from flask.ext.wtf import Form
from wtforms import (TextField, TextAreaField, PasswordField, IntegerField,
                     BooleanField, SelectField, DateField)
from wtforms.validators import (Required, Optional, Email, regexp, Length, URL,
                                ValidationError)

from wtforms.ext.sqlalchemy.fields import (QuerySelectField,
                                           QuerySelectMultipleField)

from flaskbb.helpers import SelectDateWidget
from flaskbb.extensions import db
from flaskbb.forum.models import Forum
from flaskbb.user.models import User, Group

USERNAME_RE = r'^[\w.+-]+$'
is_username = regexp(USERNAME_RE,
                     message=("You can only use letters, numbers or dashes"))


def selectable_forums():
    return Forum.query.order_by(Forum.id)


def select_primary_group():
    return Group.query.filter(Group.guest == False).order_by(Group.id)


class UserForm(Form):
    username = TextField("Username", validators=[
        Required(),
        is_username])
Пример #48
0
__author__ = 'damlin'
#coding=utf-8

from wtforms.validators import regexp
from flask.ext.babel import lazy_gettext as _

is_username = regexp(r'^\w+$', message=_("You can only use a-z,A-Z,0-9,_"))