Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Login

TODO: merge with the previous

from flask import Flask, request, redirect, url_for

app = Flask(__name__)

@app.route('/')
def index():
    return '<a href="/login">login</a>'

@app.route('/login')
def login_get():
    return '''<form action="/login" method="POST">
            <input name="username">
            <input name="password" type="password">
            <input type="submit" value="Login">
        </form>'''

@app.route('/login', methods=['POST'])
def login_post():
    username = request.form.get('username')
    password = request.form.get('password')
    if password is None or username is None:
        return redirect(url_for('login_get'))
    if password == username: # do the real verification here
        return redirect(url_for('user_page', name = username))
    return redirect(url_for('login_get'))

@app.route('/user/')
def user_page_central():
    return 'List of users'

@app.route('/user/<name>')
def user_page(name):
    return f'Page of {name}'
import app

def test_main_page():
    web = app.app.test_client()

    rv = web.get('/')
    assert rv.status == '200 OK'
    assert rv.data.decode('utf-8') == '<a href="/login">login</a>'

def test_login_get():
    web = app.app.test_client()

    rv = web.get('/login')
    assert rv.status == '200 OK'
    assert '<form action="/login" method="POST">' in rv.data.decode('utf-8')

def test_login_post():
    web = app.app.test_client()

    rv = web.post('/login', data={'username': 'foobar', 'password': 'foobar'})
    assert rv.status == '302 FOUND'
    assert rv.headers['Location'] == '/user/foobar'
    assert '<title>Redirecting...</title>' in rv.data.decode('utf-8')

    rv = web.get('/user/foobar')
    assert rv.status == '200 OK'
    assert 'Page of foobar' == rv.data.decode('utf-8')

# TODO: add more tests