2017-02-21 62 views
1

我有一個用戶需要註冊的APP。表格中的Python燒瓶形式 - 註冊過程的更新部分

我有一個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

即使我設法解決這個問題,整個頁面都會重新加載,而且我可能會丟失之前所有字段的輸入。

更多的想法:

我可以創造這一個多視圖和已經進入數據存儲在cookie中。我的初始路線是/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我在哪裏提交表格(測試atm。與極限()):

# 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解決方案?因爲你的需求可以很容易地實現客戶端使用Ajax和自動完成標籤添加jQuery插件

+0

我已經使用JavaScript自動完成功能解決它。 – Roman

+0

這不是一個答案btw。評論應該進入評論部分,否則你會被低估。 – Roman