我正在使用 web.py 框架来设计一个小型 Web 应用程序,目前我已经创建了一个登录页面,代码如下
索引.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()
在上面的代码中,我的意图是
"Username not provided"
1.如果没有提供用户名,点击登录时应该显示
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"
,如果没有,也显示密码假如
上述正则表达式是否能正常工作(直到现在我都在使用正则表达式)
如果浏览器上未提供用户名、密码,如何在浏览器上显示上述验证消息,因为我创建了另一个 html 页面,只是为了让
Invalid username or password
消息在详细信息不正确时出现在浏览器上
我们是否可以在单个 html 文件(如login.html
)本身中进行所有这些验证?,我已经尝试了很多,但我无法捕捉到这里正在进行的过程,如果是这样,我们可以节省为单个消息创建多个 html
谁能告诉我如何解决上述常见问题?不要介意我的查询,因为这是我在 Web 应用程序中的第一步,而且我以前曾在 Web 应用程序上工作过