2017-02-21 29 views
1

У меня есть APP, где пользователи должны зарегистрироваться.Python Flask form в форме - обновить часть процесса регистрации

У меня есть один form для регистрации имя пользователя данных по электронной почте и т.д.

Пользователь регистрируется в том же процессе, что предприятие может иметь несколько категорий.

В моей БД у меня есть таблица категории, которая имеет фиксированное количество категорий, позволяет сказать, 500.

Когда пользователь регистрируется, он может выбрать до 10 категорий для своей компании.

ПРОБЛЕМА:

Я не хочу, чтобы отобразить 500 категорий на этой странице. Я хотел бы иметь поле ввода, в котором пользователь может попытаться найти категории, которые подходят для его компании.

МОЯ ИДЕЯ:

Я создал второй form_category. Я использую эту форму для ограничения запроса с помощью sqlalchemy %like%, поэтому мне не нужно отображать все 500 категорий. Я ограничиваю их позволяет говорить 20 категорий и показывать только соответствующие те, где применяется пользовательский ввод% как%:

searched_categories = session.query(Category).filter(Category.category_name.like('%'+form_category.category_search.data.strip()+'%')).limit(20) 

ПРОБЛЕМА

Прежде всего я имею теперь форму в форме. Обе формы имеют одно и то же действие. И кажется, что первая кнопка отправки всегда активна, и теперь я могу только отправить form_category.

И даже если мне удастся это исправить, вся страница будет перезагружаться каждый раз, и я, вероятно, потеряю все входы из полей раньше.

MORE IDEAS:

я мог бы создать еще один вид для этого и сохранить уже введенные данные в куки. Мой первоначальный маршрут будет /register, и если пользователь будет искать категорию, он станет /register/<user-input>, но это не так.

Я также мог удалить form_category и попытаться сделать все с помощью jQuery, но для людей с noscript сайт не будет использоваться.

приятно иметь

Есть ли способ, чтобы не relaod всей страницы, если форма отправлена, я хотел бы только relaod части страницы, где отображаются категории.

Вот код:

формы:

class RegisterUserForm(Form): 
    # infos for user 
    email = EmailField('Email', validators=[DataRequired(message="Geben Sie eine Email ein"), Email()]) 
    password = PasswordField('Passwort', validators=[DataRequired(message="Geben Sie ein Passwort ein"), EqualTo('confirm_password', message=u'Passwörter stimmen nicht überein'), Length(min=5, message="Passwort muss mindestens 5 Zeichen lang sein")]) 
    confirm_password = PasswordField('Passwort wiederholen') 
    # infos for company 
    company_name = TextField('Firmenname', validators=[DataRequired(message=u"Wie heißt Ihre Firma?")]) 
    # infos for category 
    category_is_merchant = BooleanField(u"Händler") 
    category_is_distributor = BooleanField(u"Großhändler") 
    category_is_service = BooleanField("Diensleister") 
    category_is_manufacturor = BooleanField("Hersteller") 
    # etc... 

class SearchCategoryForm(Form): 
    category_search = TextField('Nach Branche suchen') 

форма в виде в моем HTML файл дзиндзя (я удалил несущественные данные):

<form class="col-xs-12" id="register-form" enctype="multipart/form-data" method="POST" action="{{ url_for('register', next=request.args.get('next')) }}"> 


    {{ form.hidden_tag() }} 
     <div id="content-company-data"> 
     <h2> Firmendaten </h2> 
     <div class="content"> 

    <!-- some data --> 

    <form class="col-xs-12" id="search-category-form" enctype="multipart/form-data" method="POST" action="{{ url_for('register', next=request.args.get('next')) }}"> 
    {{ form_category.hidden_tag() }} 

    <div class="form-group"> 
    {{ form_category.category_search.label }} 
    {{ form_category.category_search(class = "form-control", placeholder ="Branche") }} 

    {% if form_category.category_search.data.errors %} 
     {% for error in form_category.category_search.data.errors %} 
     <p class="flashes-error-form"> {{ error }}</p> 
     {% endfor %} 
    {% endif %} 
    </div> 

    <button type="submit" class="btn"> Branche suchen </button> 

    </form> 

    <!-- some data --> 

     <button type="submit" class="btn register-button"> Jetzt Kostenlos Registrieren </button> 

</form> 

В моей основной py, где я представляю формы (испытательные атм. с лимитом()):

# register site 
@app.route('/registrieren', methods=["GET","POST"]) 
def register(): 
    if current_user.is_authenticated(): 
     return redirect(url_for('logged_in')) 
    else: 
     form = RegisterUserForm() 
     form_category = SearchCategoryForm() 

     searched_categories = Category.query.order_by(asc("id")).limit(4) 

     if form_category.validate_on_submit(): 
      print "cat form validates"     
      searched_categories = Category.query.order_by(asc("id")).limit(2) 

      return redirect(url_for('register')) 

     if form.validate_on_submit(): 
      print "user form validates" 

      #adding data to DB here 
      return redirect(url_for('unconfirmed')) 

     return render_template('register.html', form = form, form_category=form_category, searched_categories=searched_categories) 

ответ

0

Вы ищете чистое решение для Python? Coz ваше требование может быть легко реализовано на стороне клиента с помощью Ajax и автоматически дополняющих добавление тегов jquery-плагинов

+0

Я уже исправил его с помощью функции автозаполнения из JavaScript. – Roman

+0

Это ответ не кстати. комментарии должны войти в раздел комментариев, иначе вы будете замедленными. – Roman