python - validators - Flask-WTF/WTForms con Unittest falla la validación, pero funciona sin Unittest
validators wtforms (1)
Debería configurar WTF_CSRF_ENABLED
no CSRF_ENABLED
- en este momento, Flask-WTForms está intentando validar su token CSRF, pero no está proporcionando uno:
class TestCase(unittest.TestCase):
def setUp(self):
app.config[''TESTING''] = True
# Wrong key:
# app.config[''CSRF_ENABLED''] = False
# Right key:
app.config[''WTF_CSRF_ENABLED''] = False
Cuando ejecuto la aplicación normalmente y inicio de sesión en el navegador, funciona. Pero con Unittest no me registrará ..., vuelve a la página de inicio de sesión.
Tanto "print rv.data" solo imprime el contenido de la página de inicio de sesión, pero debe imprimir el contenido de la página de índice, que es login_required
si ayuda, estoy usando SQLAlchemy como ORM. Alguien sabe lo que puede ser un problema? Si se necesita más código, lo proporcionaré. Intenté buscar una pregunta similar aquí, pero no la encontré.
#!flask/bin/python
import os
import unittest
from config import basedir
from app import app, db
from app.models import User,Exam,Attempt,Subject
class TestCase(unittest.TestCase):
def setUp(self):
app.config[''TESTING''] = True
app.config[''CSRF_ENABLED''] = False
app.config[''SQLALCHEMY_DATABASE_URI''] = ''sqlite:///'' + os.path.join(basedir, ''test.db'')
self.app = app.test_client()
db.create_all()
def tearDown(self):
db.session.remove()
db.drop_all()
def login(self, username, password):
return self.app.post(''/login'', data=dict(
username=username,
password=password
), follow_redirects=True)
def test_users(self):
u = User(username = ''gaucan'', password = ''gau'')
db.session.add(u)
db.session.commit()
rv = self.login(''gaucan'',''gau'')
print rv.data
rv = self.app.get(''/'',follow_redirects=True)
print rv.data
if __name__ == ''__main__'':
unittest.main()
Agregué la función de acceso de vista para que lo veas ...
@app.route(''/login'', methods = [''GET'', ''POST''])
def login():
if g.user is not None and g.user.is_authenticated():
return redirect(url_for(''index''))
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(username = form.username.data).first()
if user is not None and form.password.data == user.password:
login_user(user)
flash("Logged in successfully.")
return redirect(request.args.get(''next'') or url_for(''index''))
flash(''Invalid password'')
return render_template(''login.html'',
title = ''Sign In'',
form = form)
aquí está la traza inversa de la línea arriba de form.validate_on_submit
> /home/gaucan/webdev/projekt2/app/views.py(131)login()
-> if form.validate_on_submit():
(Pdb) bt
/home/gaucan/webdev/projekt2/shit.py(41)<module>()
-> unittest.main()
/usr/lib64/python2.7/unittest/main.py(95)__init__()
-> self.runTests()
/usr/lib64/python2.7/unittest/main.py(232)runTests()
-> self.result = testRunner.run(self.test)
/usr/lib64/python2.7/unittest/runner.py(151)run()
-> test(result)
/usr/lib64/python2.7/unittest/suite.py(70)__call__()
-> return self.run(*args, **kwds)
/usr/lib64/python2.7/unittest/suite.py(108)run()
-> test(result)
/usr/lib64/python2.7/unittest/suite.py(70)__call__()
-> return self.run(*args, **kwds)
/usr/lib64/python2.7/unittest/suite.py(108)run()
-> test(result)
/usr/lib64/python2.7/unittest/case.py(433)__call__()
-> return self.run(*args, **kwds)
/usr/lib64/python2.7/unittest/case.py(369)run()
-> testMethod()
/home/gaucan/webdev/projekt2/shit.py(35)test_users()
-> rv = self.login(''gaucan'',''gau'')
/home/gaucan/webdev/projekt2/shit.py(28)login()
-> ), follow_redirects=True)
/home/gaucan/webdev/projekt2/flask/lib/python2.7/site-packages/werkzeug/test.py(771)post()
-> return self.open(*args, **kw)
/home/gaucan/webdev/projekt2/flask/lib/python2.7/site-packages/flask/testing.py(108)open()
-> follow_redirects=follow_redirects)
/home/gaucan/webdev/projekt2/flask/lib/python2.7/site-packages/werkzeug/test.py(735)open()
-> response = self.run_wsgi_app(environ, buffered=buffered)
/home/gaucan/webdev/projekt2/flask/lib/python2.7/site-packages/werkzeug/test.py(658)run_wsgi_app()
-> rv = run_wsgi_app(self.application, environ, buffered=buffered)
/home/gaucan/webdev/projekt2/flask/lib/python2.7/site-packages/werkzeug/test.py(854)run_wsgi_app()
-> app_iter = app(environ, start_response)
/home/gaucan/webdev/projekt2/flask/lib/python2.7/site-packages/flask/app.py(1836)__call__()
-> return self.wsgi_app(environ, start_response)
/home/gaucan/webdev/projekt2/flask/lib/python2.7/site-packages/flask/app.py(1817)wsgi_app()
-> response = self.full_dispatch_request()
/home/gaucan/webdev/projekt2/flask/lib/python2.7/site-packages/flask/app.py(1475)full_dispatch_request()
-> rv = self.dispatch_request()
/home/gaucan/webdev/projekt2/flask/lib/python2.7/site-packages/flask/app.py(1461)dispatch_request()
-> return self.view_functions[rule.endpoint](**req.view_args)
> /home/gaucan/webdev/projekt2/app/views.py(131)login()
-> if form.validate_on_submit():
(Pdb)