Setting up a test web server

In Chapter 1, Laying the Foundation for Reproducible Data Analysis, we discussed why unit testing is a good idea. Purists will tell you that you only need unit tests. However, the general consensus is that higher-level testing can also be useful.

Obviously, this book is about data analysis and not about web development. Still, sharing your results or data via a website or web service is a common requirement. When you mine the Web or do something else related to the Web, it often becomes necessary to reproduce certain use cases, such as login forms. As you expect of a mature language, Python has many great web frameworks. I chose Flask, a simple Pythonic web framework for this recipe because it seemed easy to set up, but you should use your own judgment because I have no idea what your requirements are.

Getting ready

I tested the code with Flask 0.10.1 from Anaconda. Install Flask with conda or pip, as follows:

$ conda install flask
$ pip install flask

How to do it…

In this recipe, we will set up a secure page with a login form, which you can use for testing. The code consists of a app.py Python file and a HTML file in the templates directory (I will not discuss the HTML in detail):

  1. The imports are as follows:
    from flask import Flask
    from flask import render_template
    from flask import request
    from flask import redirect
    from flask import url_for
    
    app = Flask(__name__)
  2. Define the following function to handle requests for the home page:
    @app.route('/')
    def home():
        return "Test Site"
  3. Define the following function to process login attempts:
    @app.route('/secure', methods=['GET', 'POST'])
    def login():
        error = None
        if request.method == 'POST':
            if request.form['username'] != 'admin' or
                    request.form['password'] != 'admin':
                error = 'Invalid password or user name.'
            else:
                return redirect(url_for('home'))
        return render_template('admin.html', error=error)
  4. The following block runs the server (don't use debug=True for public-facing websites):
    if __name__ == '__main__':
        app.run(debug=True)
  5. Run $ python app.py and open a web browser at http://127.0.0.1:5000/ and http://127.0.0.1:5000/secure.

Refer to the following screenshot for the end result:

How to do it…
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset