validasi waktu nyata pada wtform. Bisakah saya mengakses validator di front end? [duplikat]

Saya memiliki kelas wtform yang terlihat seperti ini:

class Registration(Form):
  email = StringField('Email', validators=[Required(), Email()])
  username = StringField('Username', validators=[Required()])
  name = StringField('Name', validators=[Required()])
  password = PasswordField('Password',
    validators=[
      Required(),
      EqualTo('confirm_password', message='Your passwords did not match'),
      Length(min=6, max=20, message='passwords must be longer than 6 characters')
    ])
  confirm_password = PasswordField('Confirm Password', validators=[Required()])
  submit = SubmitField('Register')

  def validate_email(self, field):
    if User.query.filter_by(email=field.data).first():
      raise ValidationError('Email already registered')

  def validate_username(self, field):
    if User.query.filter_by(username=field.data).first():
      raise ValidationError('Username already exists')

Saya membayangkan WTForms tidak menawarkan segala bentuk validasi inline secara real-time di front-end, yang tidak masalah, tapi saya bertanya-tanya apakah ada cara untuk membuat validasi real-time dengan mengambil validator untuk bidang dan menggunakannya di beberapa jenis javascript.

Misalnya, bidang kata sandi. Kata sandi harus lebih dari 6 karakter. Dalam hal ini, saya ingin menampilkan formulir validasi seperti saat mereka mengetiknya: apa yang terjadi saat mereka mengetikkan  kata sandi tidak valid

Namun, begitu mereka mengetikkan kata sandi dengan panjang yang valid, ini akan menampilkan: mereka terus mengetik dan membuat kata sandi yang valid

Masalah yang saya alami adalah mengakses persyaratan dan validator wtform seperti yang ada di halaman. Apakah ini mungkin dilakukan?


person corvid    schedule 13.06.2014    source sumber


Jawaban (1)


Cara yang saya gunakan tidak sepenuhnya sepele, namun juga tidak terlalu rumit. Saya melampirkan penangan untuk mengubah atau mengaburkan peristiwa di bidang yang ingin saya validasi. Ketika saya mendapatkan acara ini, pengendali saya mengumpulkan nilai untuk semua bidang dalam formulir dan mengirimkan permintaan ajax POST ke server. Server sekarang memiliki seluruh formulir dan dapat melakukan validasi dengan WTForms. Respons JSON dari permintaan Ajax ini adalah daftar kesalahan validasi, yang dapat ditampilkan oleh klien sesuai kebutuhan.

Detail selengkapnya di jawaban ini.

person Miguel    schedule 13.06.2014
comment
hei aku sedang membaca bukumu sekarang. lagi pula, ini cukup mendekati apa yang saya inginkan, mengubah blur menjadi _.debounce sehingga dapat berfungsi saat mereka masih melihatnya sebaris Terima kasih - person corvid; 14.06.2014