小さなWebアプリケーションを設計するためにweb.pyフレームワークを使用しています。現在、ログインページを作成しており、コードは以下のとおりです
index.py
import web
from web import form
from web.contrib.auth import DBAuth
import MySQLdb as mdb
render = web.template.render('templates/')
urls = (
'/', 'Login',
'/projects', 'Projects',
'/logout', 'Logout',
)
app = web.application(urls, globals()) # Creating an instance(object) app which is the mediator between our classes and the web.It will handle browser requests and serve your pages
web.config.debug = False
db = web.database(dbn='mysql', db='Python_Web', user='root', pw='redhat')
settings = {}
if web.config.get('_session') is None:
session = web.session.Session(app,web.session.DiskStore('sessions'),initializer={'user':'anonymous','loggedin':False})
web.config._session = session
else:
session = web.config._session
auth = DBAuth(app, db, session,**settings)
def logged():
if session['loggedin'] == 1:
return True
else:
return False
class Login:
# field validators
username_required = form.Validator("Username not provided", bool)
password_required = form.Validator("Password not provided", bool)
# form validators
login_details_required = form.Validator("Please Enter Login Details", lambda f: f["username"] or f["password"])
login_form = form.Form(
form.Textbox('username', username_required),
form.Password('password',password_required,description="Password"),
form.Button('Login'),
)
def GET(self):
if logged():
raise web.seeother('/projects')
else:
form = self.login_form()
return render.login(form)
def POST(self):
if not my_form.validates(dict(username="", password="small")):
return render.login(form)
i = web.input()
username = i.username.strip()
password = i.password.strip()
user = auth.authenticate(username, password)
if not user:
session.loggedin = False
return render.login_error(form)
else:
auth.login(user)
session.loggedin = True
session.user = i.username.strip()
raise web.seeother('/projects')
if __name__ == "__main__":
web.internalerror = web.debugerror
app.run()
ここで上記のコードで私の意図は
1.ユーザー名が提供されていない場合は"Username not provided"
、ログインをクリックしたときに表示されます
2.パスワードが提供されていない場合は、["password not provided"
ログイン] をクリックするとパスワードが表示されます。
3.パスワードが提供されたが、長さが7文字未満の場合"Password length should be minimum 7 characters"
、ログインをクリックすると表示されます(もちろん、この検証コンセプトcreating a user
はパスワードを選択するときに適しています)
4.両方が提供されていない場合は、["Please Enter Login Details"
ログイン]をクリックすると表示されます
5.ログインの詳細が一致しない"Invalid Username or Password"
場合は、ログインをクリックすると表示され、ログインの詳細が一致した場合は次のページにリダイレクトされます
上記のコードでは、ログインの詳細が次のページへのリダイレクトに正常に一致し、表示されない場合Invalid username or password
(ページ return render.login_error(form)
から同じ html コードをコピーし、その中に余分な行を追加しました)login(form)
login_error(form)
"Invalid Username or Password"
またregex
、パスワード検証用の式を作成しましたが、それが機能することを願っています(正確にチェックしたわけではありません)。パスワードの長さが7文字未満の場合、同じログインページにリダイレクトする代わりに次のページにリダイレクトしないため、同時に表示したい"Password length should be minimum 7 characters"
私ができないメッセージのようなブラウザで(やり方がわからない)
また、上記のようform.notnull()
に作成時にユーザー名を検証として指定Form
しました。ログインをクリックしようとすると、フォームが検証されるかどうかがチェックされ、同じログインページにリダイレクトされない場合はメッセージが表示され、"Please enter the username"
そうでない場合はパスワードも表示されます提供された
上記の正規表現が正しく機能するかどうか (私は今まで正規表現に取り組んでいませんでした)
Invalid username or password
詳細が正しくない場合にメッセージをブラウザに表示するためだけに別のhtmlページを作成したため、ブラウザでユーザー名、パスワードが提供されていない場合にブラウザに上記の検証メッセージを表示する方法
このすべての検証を単一の html ファイル (のようなlogin.html
) 自体で実行できるかどうか? 、私は多くのことを試しましたが、ここで行われているプロセスをキャッチできません。そうであれば、個々のメッセージに対して複数の html を作成する手間を省くことができます
上記の一般的な問題を解決する方法を誰か教えてもらえますか? これは Web アプリケーションの最初のステップであり、以前は Web アプリケーションに取り組んだことがないため、クエリは気にしないでください。