2017-04-11 14 views
0

私はフラスコファイルを作成していますが、機能とメソッドの一部を別のPythonファイルに配置して作業するのが簡単で、私のフラスコアプリの機能性だけです。私は何をするかを見てきましたが、何らかの理由で私と一緒に働いていないので、誰かが私を助けてくれることを望んでいました。私は以下のファイルスニペットとgithubのリンクを持っています。ファイルを別のファイルに移動する

githubの:https://github.com/omar-jandali/RoadTripWebsite

のinitの.pyファイル:

import modu 
from flask import Flask, render_template, request, redirect, url_for, flash 
from flask import escape, session 
from datetime import datetime 
from sqlalchemy import * 
from sqlalchemy import create_engine 
from sqlalchemy.orm import sessionmaker 
from database_setup import Users, Groups, Records, Base 

@app.route('/validate_registration', methods=['GET', 'POST']) 
def Validate_Registration(): 
    usernameMinChars = 4 
    usernameMaxChars = 12 
    passwordMinChars = 8 
    passwordMaxChars = 14 

    if request.method == 'POST': 

     # this is all of the fields in the form 
     username = request.form['username'] 
     email = request.form['email'] 
     password = request.form['password'] 
     verify = request.form['verify'] 
     check_username = db_session.query(Users).filter_by(Username = username).\ 
          first() 
     check_email = db_session.query(Users).filter_by(Email = email).first() 

     if username != None: 
      if len(username) >= usernameMinChars: 
       if len(username) <= usernameMaxChars: 
        if check_username == None: 
         valid_username = username 
        else: 
         flash('The username ' + username + ' is already in use') 
         return redirect(url_for('Registration')) 
       else: 
        flash('The username is too long') 
        return redirect(url_for('Registration')) 
      else: 
       flash('The username is too short') 
       return redirect(url_for('Registration')) 
     else: 
      flash('Youh ave to enter a username to register') 
      return redirect(url_for('Registration')) 

変更したサーバ/ のinitの.pyファイル(私は別のにDEFを呼び出すようにそれをchagneしたいですユーザー名を確認し、有効な場合はユーザー名を送信してください)。

置き換え:

if username != None: 
      if len(username) >= usernameMinChars: 
       if len(username) <= usernameMaxChars: 
        if check_username == None: 
         valid_username = username 
        else: 
         flash('The username ' + username + ' is already in use') 
         return redirect(url_for('Registration')) 
       else: 
        flash('The username is too long') 
        return redirect(url_for('Registration')) 
      else: 
       flash('The username is too short') 
       return redirect(url_for('Registration')) 
     else: 
      flash('Youh ave to enter a username to register') 
      return redirect(url_for('Registration')) 

valid_username = modu.ValidateUsername(check_username) 

**私はのinitの.pyファイルの先頭

で輸入されているのと同じファイルディレクトリ内MODUと呼ばれる新しいファイルを追加している。ここで必要に応じてinit .pyファイルで呼び出すことができるすべてのdefを保持するために作成されたmodu.pyファイル。

from flask import Flask, render_template, request, redirect, url_for, flash 
from flask import escape, session 
from datetime import datetime 
from sqlalchemy import * 
from sqlalchemy import create_engine 
from sqlalchemy.orm import sessionmaker 
from database_setup import Users, Groups, Records, Base 


    def ValidateUsername(username): 
     if username != None: 
      if len(username) >= usernameMinChars: 
       if len(username) <= usernameMaxChars: 
        if check_username == None: 
         valid_username = username 
         return valid_username 
        else: 
         flash('The username ' + username + ' is already in use') 
         return redirect(url_for('Registration')) 
       else: 
        flash('The username is too long') 
        return redirect(url_for('Registration')) 
      else: 
       flash('The username is too short') 
       return redirect(url_for('Registration')) 
     else: 
      flash('Youh ave to enter a username to register') 
      return redirect(url_for('Registration')) 
+0

したがって、リダイレクトオブジェクトを変数 'valid_username'として戻したいとしますか? –

+0

何が例外ですか? – stamaimer

+0

私はユーザー名を渡し、すべてのバリデーションが合格したことを確認し、すべてのバリデーションが合格した場合は、ユーザー名を返信してデータベースに保存できるようにします。 @ cricket_007は、コードのブロックでそれを行います。 –

答えて

0

まず、あなたが

第二に持っていないときは、例えば、

def is_valid_user(username): 
    go_register = False 
    if not username: 
     flash('You have to enter a username to register') 
     go_register = True 

    if len(username) >= usernameMinChars: 
     flash('The username is too long') 
     go_register = True 
    if len(username) <= usernameMaxChars: 
     flash('The username is too short') 
     go_register = True 

    if not check_username: 
     flash('The username ' + username + ' is already in use') 
     go_register = True 

    # return two items, a redirect and the username 
    if go_register: 
     return redirect(url_for('Registration')), None 

    # If there was no error, you don't redirect 
    return None, username 

ことをキャッチする必要がありますので、あなたは、2つの異なるオブジェクトを返すようにしようとしているのネストではない事をしてみてください

go_register, valid_username = is_valid_user(username) 
if go_register: 
    return go_register 
else: 
    flash("valid " + valid_username) 
+0

コードを見て、やっていたことを理解した後、私はそのアイデアを得て、プロジェクトでビルドを開始しました。私はそれがどのように進むのかを知らせます。 –

+1

私はあなたの例に基づいてコードを動作させようと努力していました。私はそれが機能していると言ってうれしく思います。助けてくれてありがとう。私は他の人のために私のソリューションを投稿します@ cricket_007 –

+0

喜んで聞いてください。それが助けになったらあなたは私の答えを受け入れるかもしれない –

関連する問題