#python #forms #login #web.py
#python #формы #аутентификация #web.py
Вопрос:
Я написал следующее на основе нескольких разных web.py примеры, которые я нашел, но я не могу опубликовать страницу входа, есть идеи, почему мой код ооочень foobar?
p.s также, почему кажется, что для web.config.debug должно быть установлено значение false, если я хочу использовать сеансы?
import web
import db
from web import form
login = form.Form(
form.Textbox('username'),
form.Password('password'),
form.Button('Login'), )
urls = (
'/', 'Index',
'/login', 'Login',
'/home', 'Home', )
web.config.debug = False
app = web.application(urls, globals())
session = web.session.Session(app, web.session.DiskStore('sessions'))
class Login:
def GET(self):
f = login()
return render.register(f)
def POST(self):
f = web.input()
check = db.db_query('select * from users where username=? and password=?', (i.username, i.password))
if check:
session.loggedin = True
session.username = i.username
raise web.seeother('/home')
else: return render.base("Those login details don't work.")
class Index:
def GET(self):
return 'index'
class Home:
def GET(self):
return 'home'
if __name__ == '__main__':
app.run()
Комментарии:
1. «p.s также, почему кажется, что для web.config.debug должно быть установлено значение false, если я хочу использовать сеансы?» — поскольку заголовки сеансов / cookie должны быть отправлены перед содержимым страницы, поэтому, если какие-либо сообщения отладки отправляются перед отправкой сеансов / cookie, они не будут работать
2. Ошибка может быть в
register
шаблоне. Можете ли вы поделиться этим?
Ответ №1:
Пожалуйста, проверьте представленный здесь пример ( http://webpy.org/cookbook/forms ), мне кажется, что простое выполнение form.Form(…) на самом деле не создает тег, поэтому, пожалуйста, проверьте свой выходной HTML.
По сути, в ней отсутствуют <form name="main" method="post"> ... </form>
все ваши элементы (textinput, button)
Ответ №2:
Вы используете переменную ‘i’, которая не была определена…попробуйте использовать ‘f’, который вы определили для web.input()