As a powerful scripting language adapted to both fast prototypingand bigger projects, Python is widely used in web applicationdevelopment.
Context¶
WSGI¶
The Web Server Gateway Interface (or “WSGI” for short) is a standardinterface between web servers and Python web application frameworks. Bystandardizing behavior and communication between web servers and Python webframeworks, WSGI makes it possible to write portable Python web code thatcan be deployed in any WSGI-compliant web server.WSGI is documented in PEP 3333.
Frameworks¶
The framework can power native mobile apps with a Web API back end, as well as mobile web sites using responsive design frameworks. The list does not end here, beside the above-mentioned frameworks from the survey, there are also a few popular web frameworks which are worthy to be mentioned in this article. They are-Laravel. Web-Scraping-with-laravel This project will guide you to do Web Scrapping Using Laravel This is like a boiler plate you can use for your own project I have written an article For this project which will help you To understand More.
Broadly speaking, a web framework consists of a set of libraries and a mainhandler within which you can build custom code to implement a web application(i.e. an interactive web site). Most web frameworks include patterns andutilities to accomplish at least the following:
- URL Routing
- Matches an incoming HTTP request to a particular piece of Python code tobe invoked
- Request and Response Objects
- Encapsulates the information received from or sent to a user’s browser
- Template Engine
- Allows for separating Python code implementing an application’s logic fromthe HTML (or other) output that it produces
- Development Web Server
- Runs an HTTP server on development machines to enable rapid development;often automatically reloads server-side code when files are updated
Django¶
Django is a “batteries included” webapplication framework, and is an excellent choice for creating content-orientedwebsites. By providing many utilities and patterns out of the box, Django aimsto make it possible to build complex, database-backed web applications quickly,while encouraging best practices in code written using it.
Django has a large and active community, and many pre-built re-usablemodules that can be incorporated into a newproject as-is, or customized to fit your needs.
There are annual Django conferences in the United States, Europe, and Australia.
The majority of new Python web applications today are built with Django.
Flask¶
Flask is a “microframework” for Python, and isan excellent choice for building smaller applications, APIs, and web services.
Building an app with Flask is a lot like writing standard Python modules,except some functions have routes attached to them. It’s really beautiful.
Rather than aiming to provide everything you could possibly need, Flaskimplements the most commonly-used core components of a web applicationframework, like URL routing, request and response objects, and templates.
If you use Flask, it is up to you to choose other components for yourapplication, if any. For example, database access or form generation andvalidation are not built-in functions of Flask.
This is great, because many web applications don’t need those features.For those that do, there are manyExtensions available that maysuit your needs. Or, you can easily use any library you want yourself!
Flask is default choice for any Python web application that isn’t a goodfit for Django.
Falcon¶
Falcon is a good choice when your goal isto build RESTful API microservices that are fast and scalable.
It is a reliable, high-performance Python web framework for building large-scaleapp backends and microservices. Falcon encourages the REST architectural style ofmapping URIs to resources, trying to do as little as possible while remaining highly effective.
Falcon highlights four main focuses: speed, reliability, flexibility, and debuggability.It implements HTTP through “responders” such as on_get()
, on_put()
, etc.These responders receive intuitive request and response objects.
Tornado¶
Tornado is an asynchronous web frameworkfor Python that has its own event loop. This allows it to natively supportWebSockets, for example. Well-written Tornado applications are known tohave excellent performance characteristics.
I do not recommend using Tornado unless you think you need it.
Pyramid¶
Pyramid is a very flexible framework with a heavyfocus on modularity. It comes with a small number of libraries (“batteries”)built-in, and encourages users to extend its base functionality. A set ofprovided cookiecutter templates helps making new project decisions for users.It powers one of the most important parts of python infrastructurePyPI.
Pyramid does not have a large user base, unlike Django and Flask. It’s acapable framework, but not a very popular choice for new Python webapplications today.
Masonite¶
Masonite is a modern and developer centric, “batteries included”, web framework.
The Masonite framework follows the MVC (Model-View-Controller) architecture pattern and is heavily inspired by frameworks such as Rails and Laravel, so if you are coming to Python from a Ruby or PHP background then you will feel right at home!
Masonite comes with a lot of functionality out of the box including a powerful IOC container with auto resolving dependency injection, craft command line tools, and the Orator active record style ORM.
Masonite is perfect for beginners or experienced developers alike and works hard to be fast and easy from install through to deployment. Try it once and you’ll fall in love.
FastAPI¶
FastAPI is a modern web framework for buildingAPIs with Python 3.6+.
It has very high performance as it is based on Starletteand Pydantic.
FastAPI takes advantage of standard Python type declarations in function parametersto declare request parameters and bodies, perform data conversion (serialization,parsing), data validation, and automatic API documentation with OpenAPI 3(including JSON Schema).
It includes tools and utilities for security and authentication (including OAuth2 with JWTtokens), a dependency injection system, automatic generation of interactive APIdocumentation, and other features.
Web Servers¶
Nginx¶
Nginx (pronounced “engine-x”) is a web server andreverse-proxy for HTTP, SMTP, and other protocols. It is known for itshigh performance, relative simplicity, and compatibility with manyapplication servers (like WSGI servers). It also includes handy featureslike load-balancing, basic authentication, streaming, and others. Designedto serve high-load websites, Nginx is gradually becoming quite popular.
WSGI Servers¶
Stand-alone WSGI servers typically use less resources than traditional webservers and provide top performance [1].
Gunicorn¶
Gunicorn (Green Unicorn) is a pure-Python WSGIserver used to serve Python applications. Unlike other Python web servers,it has a thoughtful user interface, and is extremely easy to use andconfigure.
Gunicorn has sane and reasonable defaults for configurations. However, someother servers, like uWSGI, are tremendously more customizable, and therefore,are much more difficult to effectively use.
Gunicorn is the recommended choice for new Python web applications today.
Waitress¶
Waitress is a pure-Python WSGI serverthat claims “very acceptable performance”. Its documentation is not verydetailed, but it does offer some nice functionality that Gunicorn doesn’t have(e.g. HTTP request buffering).
Waitress is gaining popularity within the Python web development community.
uWSGI¶
uWSGI is a full stack for buildinghosting services. In addition to process management, process monitoring,and other functionality, uWSGI acts as an application server for variousprogramming languages and protocols – including Python and WSGI. uWSGI caneither be run as a stand-alone web router, or be run behind a full webserver (such as Nginx or Apache). In the latter case, a web server canconfigure uWSGI and an application’s operation over theuwsgi protocol.uWSGI’s web server support allows for dynamically configuringPython, passing environment variables, and further tuning. For full details,see uWSGI magicvariables.
I do not recommend using uWSGI unless you know why you need it.
Server Best Practices¶
The majority of self-hosted Python applications today are hosted with a WSGIserver such as Gunicorn, either directly or behind alightweight web server such as nginx.
The WSGI servers serve the Python applications while the web server handlestasks better suited for it such as static file serving, request routing, DDoSprotection, and basic authentication.
Hosting¶
Platform-as-a-Service (PaaS) is a type of cloud computing infrastructurewhich abstracts and manages infrastructure, routing, and scaling of webapplications. When using a PaaS, application developers can focus on writingapplication code rather than needing to be concerned with deploymentdetails.
Heroku¶
Heroku offers first-class support forPython 2.7–3.5 applications.
Heroku supports all types of Python web applications, servers, and frameworks.Applications can be developed on Heroku for free. Once your application isready for production, you can upgrade to a Hobby or Professional application.
Heroku maintains detailed articleson using Python with Heroku, as well as step-by-step instructions onhow to set up your first application.
Heroku is the recommended PaaS for deploying Python web applications today.
Templating¶
Most WSGI applications are responding to HTTP requests to serve content in HTMLor other markup languages. Instead of directly generating textual content fromPython, the concept of separation of concerns advises us to use templates. Atemplate engine manages a suite of template files, with a system of hierarchyand inclusion to avoid unnecessary repetition, and is in charge of rendering(generating) the actual content, filling the static content of the templateswith the dynamic content generated by the application.
As template files aresometimes written by designers or front-end developers, it can be difficult tohandle increasing complexity.
Web Scraping Using Laravel For Beginners
Some general good practices apply to the part of the application passingdynamic content to the template engine, and to the templates themselves.
- Template files should be passed only the dynamiccontent that is needed for rendering the template. Avoidthe temptation to pass additional content “just in case”:it is easier to add some missing variable when needed than to removea likely unused variable later.
- Many template engines allow for complex statementsor assignments in the template itself, and manyallow some Python code to be evaluated in thetemplates. This convenience can lead to uncontrolledincrease in complexity, and often make it harder to find bugs.
- It is often necessary to mix JavaScript templates withHTML templates. A sane approach to this design is to isolatethe parts where the HTML template passes some variable contentto the JavaScript code.
Jinja2¶
Jinja2 is a very well-regarded template engine.
It uses a text-based template language and can thus be used to generate anytype of markup, not just HTML. It allows customization of filters, tags, tests,and globals. It features many improvements over Django’s templating system.
Here some important HTML tags in Jinja2:
Web Scraping Using Laravel Using
The next listings are an example of a web site in combination with the Tornadoweb server. Tornado is not very complicated to use.
The base.html
file can be used as base for all site pages which arefor example implemented in the content block.
The next listing is our site page (site.html
) loaded in the Pythonapp which extends base.html
. The content block is automatically setinto the corresponding block in the base.html
page.
Jinja2 is the recommended templating library for new Python web applications.
Chameleon¶
Chameleon Page Templates are an HTML/XML templateengine implementation of the Template Attribute Language (TAL),TAL Expression Syntax (TALES),and Macro Expansion TAL (Metal) syntaxes.
Chameleon is available for Python 2.5 and up (including 3.x and PyPy), andis commonly used by the Pyramid Framework.
Page Templates add within your document structure special element attributesand text markup. Using a set of simple language constructs, you control thedocument flow, element repetition, text replacement, and translation. Becauseof the attribute-based syntax, unrendered page templates are valid HTML and canbe viewed in a browser and even edited in WYSIWYG editors. This can makeround-trip collaboration with designers and prototyping with static files in abrowser easier.
The basic TAL language is simple enough to grasp from an example:
The <span tal:replace=”expression” /> pattern for text insertion is commonenough that if you do not require strict validity in your unrendered templates,you can replace it with a more terse and readable syntax that uses the pattern${expression}, as follows:
But keep in mind that the full <span tal:replace=”expression”>Default Text</span>syntax also allows for default content in the unrendered template.
Being from the Pyramid world, Chameleon is not widely used.
Mako¶
Mako is a template language that compiles to Pythonfor maximum performance. Its syntax and API are borrowed from the best parts of othertemplating languages like Django and Jinja2 templates. It is the default templatelanguage included with the Pylons and Pyramid webframeworks.
An example template in Mako looks like:
To render a very basic template, you can do the following:
Mako is well respected within the Python web community.
References
[1] | Benchmark of Python WSGI Servers |