Flask Documentation (1.1.X) Release 1.1.4
Total Page:16
File Type:pdf, Size:1020Kb
Flask Documentation (1.1.x) Release 1.1.4 Pallets May 14, 2021 CONTENTS 1 User’s Guide 3 1.1 Foreword.................................................3 1.2 Foreword for Experienced Programmers.................................4 1.3 Installation................................................4 1.4 Quickstart................................................7 1.5 Tutorial.................................................. 21 1.6 Templates................................................. 57 1.7 Testing Flask Applications........................................ 60 1.8 Application Errors............................................ 67 1.9 Debugging Application Errors...................................... 70 1.10 Logging.................................................. 71 1.11 Configuration Handling......................................... 74 1.12 Signals.................................................. 83 1.13 Pluggable Views............................................. 86 1.14 The Application Context......................................... 89 1.15 The Request Context........................................... 91 1.16 Modular Applications with Blueprints.................................. 95 1.17 Extensions................................................ 99 1.18 Command Line Interface......................................... 100 1.19 Development Server........................................... 108 1.20 Working with the Shell.......................................... 108 1.21 Patterns for Flask............................................. 110 1.22 Deployment Options........................................... 156 1.23 Becoming Big.............................................. 167 2 API Reference 169 2.1 API.................................................... 169 3 Additional Notes 233 3.1 Design Decisions in Flask........................................ 233 3.2 HTML/XHTML FAQ.......................................... 235 3.3 Security Considerations......................................... 239 3.4 Unicode in Flask............................................. 242 3.5 Flask Extension Development...................................... 244 3.6 Pocoo Styleguide............................................. 249 3.7 Upgrading to Newer Releases...................................... 252 3.8 Changelog................................................ 259 3.9 License.................................................. 275 3.10 How to contribute to Flask........................................ 276 i Python Module Index 279 Index 281 ii Flask Documentation (1.1.x), Release 1.1.4 Welcome to Flask’s documentation. Get started with Installation and then get an overview with the Quickstart. There is also a more detailed Tutorial that shows how to create a small but complete application with Flask. Common patterns are described in the Patterns for Flask section. The rest of the docs describe each component of Flask in detail, with a full reference in the API section. Flask depends on the Jinja template engine and the Werkzeug WSGI toolkit. The documentation for these libraries can be found at: • Jinja documentation • Werkzeug documentation CONTENTS 1 Flask Documentation (1.1.x), Release 1.1.4 2 CONTENTS CHAPTER ONE USER’S GUIDE This part of the documentation, which is mostly prose, begins with some background information about Flask, then focuses on step-by-step instructions for web development with Flask. 1.1 Foreword Read this before you get started with Flask. This hopefully answers some questions about the purpose and goals of the project, and when you should or should not be using it. 1.1.1 What does “micro” mean? “Micro” does not mean that your whole web application has to fit into a single Python file (although it certainly can), nor does it mean that Flask is lacking in functionality. The “micro” in microframework means Flask aims to keep the core simple but extensible. Flask won’t make many decisions for you, such as what database to use. Those decisions that it does make, such as what templating engine to use, are easy to change. Everything else is up to you, so that Flask can be everything you need and nothing you don’t. By default, Flask does not include a database abstraction layer, form validation or anything else where different libraries already exist that can handle that. Instead, Flask supports extensions to add such functionality to your appli- cation as if it was implemented in Flask itself. Numerous extensions provide database integration, form validation, upload handling, various open authentication technologies, and more. Flask may be “micro”, but it’s ready for pro- duction use on a variety of needs. 1.1.2 Configuration and Conventions Flask has many configuration values, with sensible defaults, and a few conventions when getting started. By conven- tion, templates and static files are stored in subdirectories within the application’s Python source tree, with the names templates and static respectively. While this can be changed, you usually don’t have to, especially when getting started. 1.1.3 Growing with Flask Once you have Flask up and running, you’ll find a variety of extensions available in the community to integrate your project for production. The Flask core team reviews extensions and ensures approved extensions do not break with future releases. As your codebase grows, you are free to make the design decisions appropriate for your project. Flask will continue to provide a very simple glue layer to the best that Python has to offer. You can implement advanced patterns in 3 Flask Documentation (1.1.x), Release 1.1.4 SQLAlchemy or another database tool, introduce non-relational data persistence as appropriate, and take advantage of framework-agnostic tools built for WSGI, the Python web interface. Flask includes many hooks to customize its behavior. Should you need more customization, the Flask class is built for subclassing. If you are interested in that, check out the Becoming Big chapter. If you are curious about the Flask design principles, head over to the section about Design Decisions in Flask. Continue to Installation, the Quickstart, or the Foreword for Experienced Programmers. 1.2 Foreword for Experienced Programmers 1.2.1 Thread-Locals in Flask One of the design decisions in Flask was that simple tasks should be simple; they should not take a lot of code and yet they should not limit you. Because of that, Flask has a few design choices that some people might find surprising or unorthodox. For example, Flask uses thread-local objects internally so that you don’t have to pass objects around from function to function within a request in order to stay threadsafe. This approach is convenient, but requires a valid request context for dependency injection or when attempting to reuse code which uses a value pegged to the request. The Flask project is honest about thread-locals, does not hide them, and calls out in the code and documentation where they are used. 1.2.2 Develop for the Web with Caution Always keep security in mind when building web applications. If you write a web application, you are probably allowing users to register and leave their data on your server. The users are entrusting you with data. And even if you are the only user that might leave data in your application, you still want that data to be stored securely. Unfortunately, there are many ways the security of a web application can be compromised. Flask protects you against one of the most common security problems of modern web applications: cross-site scripting (XSS). Unless you delib- erately mark insecure HTML as secure, Flask and the underlying Jinja2 template engine have you covered. But there are many more ways to cause security problems. The documentation will warn you about aspects of web development that require attention to security. Some of these security concerns are far more complex than one might think, and we all sometimes underestimate the likelihood that a vulnerability will be exploited - until a clever attacker figures out a way to exploit our applications. And don’t think that your application is not important enough to attract an attacker. Depending on the kind of attack, chances are that automated bots are probing for ways to fill your database with spam, links to malicious software, and the like. Flask is no different from any other framework in that you the developer must build with caution, watching for exploits when building to your requirements. 1.3 Installation 1.3.1 Python Version We recommend using the latest version of Python 3. Flask supports Python 3.5 and newer, Python 2.7, and PyPy. 4 Chapter 1. User’s Guide Flask Documentation (1.1.x), Release 1.1.4 1.3.2 Dependencies These distributions will be installed automatically when installing Flask. • Werkzeug implements WSGI, the standard Python interface between applications and servers. • Jinja is a template language that renders the pages your application serves. • MarkupSafe comes with Jinja. It escapes untrusted input when rendering templates to avoid injection attacks. • ItsDangerous securely signs data to ensure its integrity. This is used to protect Flask’s session cookie. • Click is a framework for writing command line applications. It provides the flask command and allows adding custom management commands. Optional dependencies These distributions will not be installed automatically. Flask will detect and use them if you install them. • Blinker provides support for Signals. • SimpleJSON is a fast JSON implementation that is compatible with Python’s json module. It is