wtf validators validator template form docs python flask

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)