The Python micro framework for building web applications.

Overview

Flask

Flask is a lightweight WSGI web application framework. It is designed to make getting started quick and easy, with the ability to scale up to complex applications. It began as a simple wrapper around Werkzeug and Jinja and has become one of the most popular Python web application frameworks.

Flask offers suggestions, but doesn't enforce any dependencies or project layout. It is up to the developer to choose the tools and libraries they want to use. There are many extensions provided by the community that make adding new functionality easy.

Installing

Install and update using pip:

$ pip install -U Flask

A Simple Example

# save this as app.py
from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello, World!"
$ flask run
  * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

Contributing

For guidance on setting up a development environment and how to make a contribution to Flask, see the contributing guidelines.

Donate

The Pallets organization develops and supports Flask and the libraries it uses. In order to grow the community of contributors and users, and allow the maintainers to devote more time to the projects, please donate today.

Links

Comments
  • Method `render_template` does not use blueprint specified `template_folder`

    Method `render_template` does not use blueprint specified `template_folder`

    1. File structure:
    project -
          - templates \
                    - a \
                          search.html
                    - b \
                          search.html
          - start.py
          - myapplication \
                    - test.py 
    
    1. Start file:
    # start.py
    from flask import Flask
    from myapplication.test import test_blueprint
    
    app = Flask(__name__)
    app.register_blueprint(test_blueprint)
    
    1. my application
    # test.py
    from flask import Blueprint, render_template, abort
    from jinja2 import TemplateNotFound
    
    test_blueprint = Blueprint('test_blueprint', __name__,
                            template_folder='absolute_path_to_project/templates/a')  
                            # YES, I specified the absolute path to the template a
    
    @test_blueprint.route('/test')
    def show():
        try:
            return render_template(''search.html") # HERE is the problem
        except TemplateNotFound:
            abort(404)
    

    Is this a problem? # Actually, I want to render a/search.html # But, render_template() does not use test_blueprint's template_folder # render_template() search the template list, find the first search.html, then render # So, maybe render a/search.html or b/search.html # This depend on the sequence of the template list

    blueprints 
    opened by Kevin922 57
  • What is the release schedule for 1.0?

    What is the release schedule for 1.0?

    What are the plans for the 1.0 release. This was brought up last year and there hasn't been any announcements since then. What progress is being made and what still remains?

    opened by lipis 46
  • BUG in

    BUG in "send_file" and "send_from_directory"

    L496 in helpers.py If i use flask as a package instead of a module, I want to expose a file which is not in package. checks in send_from_directory will be passed because of rel path. However, in send_file, added abs folder, it occur an error.

    bug 
    opened by baisk 40
  • allow using alternative json library

    allow using alternative json library

    It looks like flask.json does not allow the user to specify an alternative json library (such as rapidjson). Instead it just does this:

    try:
        from itsdangerous import simplejson as _json
    except ImportError:
        from itsdangerous import json as _json
    

    This currently un-overridable behavior also means that, due to differences in when default(..) is called between simplejson and json, bugs can mysteriously appear when simplejson is installed that didn't appear without it.

    Would you consider giving the user some control over which json library is used?

    json 
    opened by jab 39
  • send_file fails when filename contains unicode symbols

    send_file fails when filename contains unicode symbols

    Hi.

    I've detected an issue with supporting unicode filenames in send_file. If send_file attempts to respond with utf-8 in http headers, the answer is empty, the log contains something like "http-headers should containbe latin-1". I know that browser support IS A MESS, but it seems, that sending two filenames (filename= and filename*=) separated by semicolon should work.

    I'd like this to be handled by flask or werkzeug. Will you accept such pull request?

    opened by georgthegreat 38
  • host_matching is in Werkzeug since 0.7 but not in Flask

    host_matching is in Werkzeug since 0.7 but not in Flask

    having 'example.com' and 'example.org' running on the same server with the same data backend I thought it would be simple to serve both from a single Flask app, especially since Werkzeug has host_matching but it isn't.

    I currently workaround this by 'injecting' hostname into urls with nginx's url rewrites but this is a bit too hackish, you know.

    I would like to have syntax like this:

    @app.route("/", host="example.org")
    def hello():
        return "Hello World!"
    
    opened by constb 37
  • Message Flashing's implementation is broken and should be removed anyway

    Message Flashing's implementation is broken and should be removed anyway

    Message flashing as implemented in Flask is currently broken, under certain conditions it's possible for messages to be flashed to the wrong tab or in extreme cases the wrong device/browser.

    A correct implementation would require functionality beyond Flask's scope, message flashing itself is arguably beyond Flask's scope already.

    Why not make a piss-poor user account system that exists solely in session cookies? It seems like the same logic behind Flask's message flashing functionality.

    opened by mcilrain 35
  • Incomplete mod_wsgi documentation

    Incomplete mod_wsgi documentation

    I have been having issues for 3-4 days now to get a hello world up and running on the remote server. I figured out that it would be nice if there was a documentation from A-Z how to get that done and working.

    http://flask.pocoo.org/docs/deploying/mod_wsgi/

    The current documentation does not provide an example what to put into an exact python file, and what url to open up in the web browser to get the desired python module running on the remote server. It is okay to have references to other places if that is more logical, but the idea is to have a self-contained page which I can start reading, and by I reach the end, I will have a working remote hello world.

    This would be well appreciated.

    opened by lpapp 35
  • Add `async` support

    Add `async` support

    This will require Python 2 support to be dropped, which as I understand isn't likely to happen till 2020. Which is a bonus as it gives time to consider this change and the implications of it. (I also need to spend some time cleaning up this implementation, yet it serves as a proof of concept).

    I've written this blog post to add some extra context, but I see a key aspect to this change is that whilst it adds async support it does not do so throughout and specifically does not support ASGI. This means that Flask is constrained (when using async) to have worse performance than the ASGI equivalents. This is necessary as I don't think Flask can be async throughout (or support ASGI) whilst being backwards compatible. Yet this change is good overall, in that users would be able to add some async usage to their existing codebases. I would also like to note that they can switch to Quart if their usage becomes mostly async.

    This allows for async functions to be passed to the Flask class instance, for example as a view function,

    @app.route("/")
    async def index():
        return "Async hello"
    

    this comes with a cost though of poorer performance than using the sync equivalent.

    async 
    opened by pgjones 34
  • Nestable blueprints

    Nestable blueprints

    I'd like to be able to register "sub-blueprints" using Blueprint.register_blueprint(*args, **kwargs). This would register the nested blueprints with an app when the "parent" is registered with it. All parameters are preserved, other than url_prefix, which is handled similarly to in add_url_rule. A naíve implementation could look like this:

    class Blueprint(object):
        ...
    
        def register_blueprint(self, blueprint, **options):
            def deferred(state):
                url_prefix = options.get('url_prefix')
                if url_prefix is None:
                    url_prefix = blueprint.url_prefix
                if 'url_prefix' in options:
                    del options['url_prefix']
    
                state.app.register_blueprint(blueprint, url_prefix, **options)
            self.record(deferred)
    
    blueprints 
    opened by teozkr 33
  • Flask Multi-Server Development Hooks

    Flask Multi-Server Development Hooks

    I don't have a good description for the issue yet but one of the issues I keep running into myself in 2017 is that it's not convenient to marry Flask and webpack. The issue here is that one wants to both have a server app as well as a client app and each uses a hot reloader for code.

    There is a lot of boilerplate to make two services work and there is absolutely no support on the side of Flask to make it work. So here is what Flask most likely should do:

    Environment Awareness

    Flask needs to know about environments. For now I would propose to mirror the node model where we have an environment flag and depending on the environment flag some flags get flipped automatically. In development for instance we would turn on debug by default. This discourages apps to make too many assumptions about the debug flag but instead use an environment flag instead.

    This means debug can be flipped on and off in development mode. A potential webpack integration extension can then forward that flag to webpack.

    Proxy or be-proxied Capabilities

    Right now one either needs front/backend to be running different servers on different ports or use some manual proxy setup to make this work. Right now the webpack server can pass through to the Flask server but it's quite hacky and non trivial.

    In an ideal case Flask in development mode can spawn another process (like a webpack server, ngrok etc.) and manage this process. It would work independently of the Flask reloader but shut down together.

    If it spawns a process on a different port Flask should itself be proxied through that other server or proxy to another server if that's easier. This would most likely require that the Werkzeug server learns HTTP proxying as we might not be able to do this on the WSGI level.

    opened by mitsuhiko 31
  • Bump dessant/lock-threads from 3 to 4

    Bump dessant/lock-threads from 3 to 4

    Bumps dessant/lock-threads from 3 to 4.

    Release notes

    Sourced from dessant/lock-threads's releases.

    v4.0.0

    Learn more about this release from the changelog.

    Changelog

    Sourced from dessant/lock-threads's changelog.

    4.0.0 (2022-12-04)

    ⚠ BREAKING CHANGES

    • the action now requires Node.js 16

    Bug Fixes

    3.0.0 (2021-09-27)

    ⚠ BREAKING CHANGES

    • input parameter names have changed

      Rename the following input parameters when upgrading from v2 to v3:

      • issue-lock-inactive-days --> issue-inactive-days
      • issue-exclude-created-before --> exclude-issue-created-before
      • issue-exclude-labels --> exclude-any-issue-labels
      • issue-lock-labels --> add-issue-labels
      • issue-lock-comment --> issue-comment
      • pr-lock-inactive-days --> pr-inactive-days
      • pr-exclude-created-before --> exclude-pr-created-before
      • pr-exclude-labels --> exclude-any-pr-labels
      • pr-lock-labels --> add-pr-labels
      • pr-lock-comment --> pr-comment

    Features

    • add new filtering and labeling options, update input parameter names (26fd836)
    • allow manual triggering (a0c7da3)

    2.1.2 (2021-08-17)

    Bug Fixes

    • ignore error when commenting on issue converted to discussion (60d2a1a), closes #24

    2.1.1 (2021-07-09)

    Bug Fixes

    • update GitHub API calls (a3ccc71)

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 0
  • Type of SessionMixin underspecified, flask.session.get() fails strict type-check

    Type of SessionMixin underspecified, flask.session.get() fails strict type-check

    To reproduce:

    from flask import session
    
    session.get("foo")
    

    Produces a pyright/Pylance error in VSCode in strict typing mode:

    Type of "get" is partially unknown
      Type of "get" is "Overload[(__key: Unknown, /) -> (Unknown | None), (__key: Unknown, /, default: Unknown | _T@get) -> (Unknown | _T@get)]"Pylance[reportUnknownMemberType]
    

    mypy --strict doesn't seem to mind, but it also accepts session.get({"a": 7}) without complaint, so perhaps not a good measure.

    Changing the offending line like this fixes the problem:

    cast(MutableMapping[str, Any], session).get("foo")
    

    Based on this observation I changing this line in the SessionMixin declaration, which also fixes the problem: https://github.com/pallets/flask/blob/main/src/flask/sessions.py#L21

    # --- from ---
    class SessionMixin(MutableMapping):
    
    # --- to ---
    class SessionMixin(MutableMapping[t.Hashable, t.Any]):
    

    I'm not sure if I've gotten those types exactly right, I believe they are the broadest possible types, but perhaps keys are limited to str or values could be narrowed.

    Happy to submit a pull request if that's a help. Thanks so much for Flask, it is an immensely important contribution to the Python ecosystem I make my living in :)

    Environment:

    • Python version: 3.10.7
    • Flask version: 2.2.2
    typing 
    opened by scanny 1
  • docs should explain the `@setupmethod` behavior

    docs should explain the `@setupmethod` behavior

    The appcontext documentation should explain the new @setupmethod 'shell_context_process' behavior, linked to https://github.com/pallets/flask/pull/4577.

    Flask raises an Assertion Error.

    AssertionError: The setup method 'shell_context_processor' can no longer be called on the application. It has already handled its first request, any changes will not be applied consistently. Make sure all imports, decorators, functions, etc. needed to set up the application are done before running it.

    The error should be documented, and a correct implementation should be provided.

    docs 
    opened by HLFH 1
  • Fix subdomain inheritance for nested blueprints.

    Fix subdomain inheritance for nested blueprints.

    When child blueprints are mounted onto parents, they don't inherit the subdomain set by the parent.

    This PR ensures that routes in child blueprint will be available at the same subdomain set by the parent.

    However, children can also specify their own subdomain if necessary.

    • fixes #4834

    Checklist:

    • [x] Add tests that demonstrate the correct behavior of the change. Tests should fail without the change.
    • [x] Add or update relevant docs, in the docs folder and in code.
    • [x] Add an entry in CHANGES.rst summarizing the change and linking to the issue.
    • [x] Add .. versionchanged:: entries in any relevant code docs.
    • [x] Run pre-commit hooks and fix any issues.
    • [x] Run pytest and tox, no tests failed.
    opened by confuzeus 0
  • Celery Background Tasks: Property

    Celery Background Tasks: Property "Task" defined in "Celery" is read-only

    Currently, the documentation says to replace celery.Task with a custom ContextTask. But this raises an error using mypy:

    $ cat minimal.py 
    from flask import Flask
    from celery import Celery, Task
    
    def make_celery(app: Flask):
        celery = Celery(app.import_name)
        celery.conf.update(app.config["CELERY_CONFIG"])
    
        class ContextTask(Task):
            def __call__(self, *args, **kwargs):
                with app.app_context():
                    return self.run(*args, **kwargs)
    
        celery.Task = ContextTask
        return celery
    $ mypy minimal.py
    minimal.py:13: error: Property "Task" defined in "Celery" is read-only
    minimal.py:13: error: Incompatible types in assignment (expression has type "Type[ContextTask]", variable has type "Task[Any]")
    

    Instead one should initialize Celery with a string of the desired Task class. See Celery docs.

    $ cat minimal.py 
    from flask import Flask
    from celery import Celery, Task
    
    
    class ContextTask(Task):
        def __call__(self, *args, **kwargs):
            with app.app_context():
                return self.run(*args, **kwargs)
    
    
    def make_celery(app: Flask):
        celery = Celery(app.import_name, task_cls="minimal.minimal:ContextTask")
        celery.conf.update(app.config["CELERY_CONFIG"])
    
        return celery
    $ mypy minimal.py
    Success: no issues found in 1 source file
    
    docs 
    opened by sr-verde 0
Releases(2.2.2)
  • 2.2.2(Aug 8, 2022)

    This is a fix release for the 2.2.0 feature release.

    • Changes: https://flask.palletsprojects.com/en/2.2.x/changes/#version-2-2-1
    • Milestone: https://github.com/pallets/flask/milestone/25?closed=1
    Source code(tar.gz)
    Source code(zip)
  • 2.2.1(Aug 3, 2022)

    This is a fix release for the 2.2.0 feature release.

    • Changes: https://flask.palletsprojects.com/en/2.2.x/changes/#version-2-2-1
    • Milestone: https://github.com/pallets/flask/milestone/23?closed=1
    Source code(tar.gz)
    Source code(zip)
  • 2.2.0(Aug 2, 2022)

    This is a feature release, which includes new features and removes previously deprecated code. The 2.2.x branch is now the supported bug fix branch, the 2.1.x branch will become a tag marking the end of support for that branch. We encourage everyone to upgrade, and to use a tool such as pip-tools to pin all dependencies and control upgrades.

    • Changes: https://flask.palletsprojects.com/en/2.2.x/changes/#version-2-2-0
    • Milestone: https://github.com/pallets/flask/milestone/19?closed=1
    Source code(tar.gz)
    Source code(zip)
  • 2.1.3(Jul 13, 2022)

    • Changes: https://flask.palletsprojects.com/en/2.1.x/changes/#version-2-1-3
    • Milestone: https://github.com/pallets/flask/milestone/22?closed=1
    Source code(tar.gz)
    Source code(zip)
  • 2.1.2(Apr 28, 2022)

    This is a fix release for the 2.1.0 feature release.

    • Changes: https://flask.palletsprojects.com/en/2.1.x/changes/#version-2-1-2
    • Milestone: https://github.com/pallets/flask/milestone/21?closed=1
    Source code(tar.gz)
    Source code(zip)
  • 2.1.1(Mar 30, 2022)

    This is a fix release for the 2.1.0 feature release.

    • Changes: https://flask.palletsprojects.com/en/2.1.x/changes/#version-2-1-1
    • Milestone: https://github.com/pallets/flask/milestone/18?closed=1
    Source code(tar.gz)
    Source code(zip)
  • 2.1.0(Mar 28, 2022)

    This is a feature release, which includes new features and removes previously deprecated features. The 2.1.x branch is now the supported bugfix branch, the 2.0.x branch will become a tag marking the end of support for that branch. We encourage everyone to upgrade, and to use a tool such as pip-tools to pin all dependencies and control upgrades.

    • Changes: https://flask.palletsprojects.com/en/2.1.x/changes/#version-2-1-0
    • Milestone: https://github.com/pallets/flask/milestone/13?closed=1

    We also encourage upgrading to the latest versions of the other Pallets projects as well.

    • Werkzeug 2.1 changes: https://werkzeug.palletsprojects.com/en/2.1.x/changes/#version-2-1-0
    • Jinja 3.1 changes: https://jinja.palletsprojects.com/en/3.1.x/changes/#version-3-1-1
    • Click 8.1 changes: https://click.palletsprojects.com/en/8.1.x/changes/#version-8-1-0
    • MarkupSafe 2.1 changes: https://markupsafe.palletsprojects.com/en/2.1.x/changes/#version-2-1-1
    • ItsDangerous 2.1 changes: https://itsdangerous.palletsprojects.com/en/2.1.x/changes/#version-2-1-2
    Source code(tar.gz)
    Source code(zip)
  • 2.0.3(Feb 14, 2022)

    • Changes: https://flask.palletsprojects.com/en/2.0.x/changes/#version-2-0-3
    • Milestone: https://github.com/pallets/flask/milestone/17?closed=1
    Source code(tar.gz)
    Source code(zip)
  • 2.0.2(Oct 4, 2021)

  • 2.0.1(May 21, 2021)

  • 2.0.0(May 12, 2021)

    New major versions of all the core Pallets libraries, including Flask 2.0, have been released! :tada:

    • Read the announcement on our blog: https://palletsprojects.com/blog/flask-2-0-released/
    • Read the full list of changes: https://flask.palletsprojects.com/changes/#version-2-0-0
    • Retweet the announcement on Twitter: https://twitter.com/PalletsTeam/status/1392266507296514048
    • Follow our blog, Twitter, or GitHub to see future announcements.

    This represents a significant amount of work, and there are quite a few changes. Be sure to carefully read the changelog, and use tools such as pip-compile and Dependabot to pin your dependencies and control your updates.

    Source code(tar.gz)
    Source code(zip)
  • 2.0.0rc2(May 3, 2021)

  • 2.0.0rc1(Apr 16, 2021)

  • 1.1.2(Apr 3, 2020)

    1.1.x is the last version to support Python 2.7 and Python 3.5. It also contains deprecation warnings for code that will be removed in 2.0. Please pay attention to deprecation warnings in your project!

    This release contains a couple bug fixes.

    • Changelog: https://flask.palletsprojects.com/en/1.1.x/changelog/#version-1-1-2
    Source code(tar.gz)
    Source code(zip)
  • 1.1.1(Jul 9, 2019)

  • 1.1.0(Jul 9, 2019)

  • 1.0.4(Jul 9, 2019)

  • 1.0.3(Jul 9, 2019)

  • 1.0.2(May 2, 2018)

  • 1.0.1(Apr 30, 2018)

  • 0.12.4(Apr 30, 2018)

  • 1.0(Apr 26, 2018)

    The Pallets team is pleased to release Flask 1.0. [Read the announcement on our blog.](https://www.palletsprojects.com/blog/flask-1-0-released/

    There are over a year's worth of changes in this release. Many features have been improved or changed. Read the changelog to understand how your project's code will be affected.

    JSON Security Fix

    Flask previously decoded incoming JSON bytes using the content type of the request. Although JSON should only be encoded as UTF-8, Flask was more lenient. However, Python includes non-text related encodings that could result in unexpected memory use by a request.

    Flask will now detect the encoding of incoming JSON data as one of the supported UTF encodings, and will not allow arbitrary encodings from the request.

    Install or Upgrade

    Install from PyPI with pip:

    pip install -U Flask
    
    Source code(tar.gz)
    Source code(zip)
    Flask-1.0-py2.py3-none-any.whl(95.49 KB)
    Flask-1.0-py2.py3-none-any.whl.asc(488 bytes)
    Flask-1.0.tar.gz(628.36 KB)
    Flask-1.0.tar.gz.asc(488 bytes)
  • 0.12.3(Apr 26, 2018)

    This release includes an important security fix for JSON and a minor backport for CLI support in PyCharm. It is provided for projects that cannot update to Flask 1.0 immediately. See the 1.0 announcement and update to it instead if possible.

    JSON Security Fix

    Flask previously decoded incoming JSON bytes using the content type of the request. Although JSON should only be encoded as UTF-8, Flask was more lenient. However, Python includes non-text related encodings that could result in unexpected memory use by a request.

    Flask will now detect the encoding of incoming JSON data as one of the supported UTF encodings, and will not allow arbitrary encodings from the request.

    Upgrade

    Upgrade from PyPI with pip. Use a version identifier if you want to stay at 0.12:

    pip install -U 'Flask~=0.12.3'
    

    Or upgrade to 1.0:

    pip install -U Flask
    
    Source code(tar.gz)
    Source code(zip)
    Flask-0.12.3-py2.py3-none-any.whl(86.29 KB)
    Flask-0.12.3-py2.py3-none-any.whl.asc(488 bytes)
    Flask-0.12.3.tar.gz(518.92 KB)
    Flask-0.12.3.tar.gz.asc(488 bytes)
Sierra is a lightweight Python framework for building and integrating web applications

A lightweight Python framework for building and Integrating Web Applications. Sierra is a Python3 library for building and integrating web applications with HTML and CSS using simple enough syntax. You can develop your web applications with Python, taking advantage of its functionalities and integrating them to the fullest.

null 83 Sep 23, 2022
Fast⚡, simple and light💡weight ASGI micro🔬 web🌏-framework for Python🐍.

NanoASGI Asynchronous Python Web Framework NanoASGI is a fast ⚡ , simple and light ?? weight ASGI micro ?? web ?? -framework for Python ?? . It is dis

Kavindu Santhusa 8 Jun 16, 2022
A micro web-framework using asyncio coroutines and chained middleware.

Growler master ' dev Growler is a web framework built atop asyncio, the asynchronous library described in PEP 3156 and added to the standard library i

null 687 Nov 27, 2022
Pyrin is an application framework built on top of Flask micro-framework to make life easier for developers who want to develop an enterprise application using Flask

Pyrin A rich, fast, performant and easy to use application framework to build apps using Flask on top of it. Pyrin is an application framework built o

Mohamad Nobakht 10 Jan 25, 2022
A high-level framework for building GitHub applications in Python.

A high-level framework for building GitHub applications in Python. Core Features Async Proper ratelimit handling Handles interactions for you (

Vish M 3 Apr 12, 2022
A proof-of-concept CherryPy inspired Python micro framework

Varmkorv Varmkorv is a CherryPy inspired micro framework using Werkzeug. This is just a proof of concept. You are free to use it if you like, or find

Magnus Karlsson 1 Nov 22, 2021
Bromelia-hss implements an HSS by using the Python micro framework Bromélia.

Bromélia HSS bromelia-hss is the second official implementation of a Diameter-based protocol application by using the Python micro framework Bromélia.

henriquemr 7 Nov 2, 2022
Flask Sugar is a web framework for building APIs with Flask, Pydantic and Python 3.6+ type hints.

Flask Sugar is a web framework for building APIs with Flask, Pydantic and Python 3.6+ type hints. check parameters and generate API documents automatically. Flask Sugar是一个基于flask,pyddantic,类型注解的API框架, 可以检查参数并自动生成API文档

null 162 Dec 26, 2022
Free and open source full-stack enterprise framework for agile development of secure database-driven web-based applications, written and programmable in Python.

Readme web2py is a free open source full-stack framework for rapid development of fast, scalable, secure and portable database-driven web-based applic

null 2k Dec 31, 2022
web.py is a web framework for python that is as simple as it is powerful.

web.py is a web framework for Python that is as simple as it is powerful. Visit http://webpy.org/ for more information. The latest stable release 0.62

null 5.8k Dec 30, 2022
An abstract and extensible framework in python for building client SDKs and CLI tools for a RESTful API.

django-rest-client An abstract and extensible framework in python for building client SDKs and CLI tools for a RESTful API. Suitable for APIs made wit

Certego 4 Aug 25, 2022
Asita is a web application framework for python based on express-js framework.

Asita is a web application framework for python. It is designed to be easy to use and be more easy for javascript users to use python frameworks because it is based on express-js framework.

Mattéo 4 Nov 16, 2021
Ape is a framework for Web3 Python applications and smart contracts, with advanced functionality for testing, deployment, and on-chain interactions.

Ape Framework Ape is a framework for Web3 Python applications and smart contracts, with advanced functionality for testing, deployment, and on-chain i

ApeWorX Ltd. 552 Dec 30, 2022
Library for building WebSocket servers and clients in Python

What is websockets? websockets is a library for building WebSocket servers and clients in Python with a focus on correctness and simplicity. Built on

Aymeric Augustin 4.3k Dec 31, 2022
A comprehensive reference for all topics related to building and maintaining microservices

This pandect (πανδέκτης is Ancient Greek for encyclopedia) was created to help you find and understand almost anything related to Microservices that i

Ivan Bilan 64 Dec 9, 2022
Async Python 3.6+ web server/framework | Build fast. Run fast.

Sanic | Build fast. Run fast. Build Docs Package Support Stats Sanic is a Python 3.6+ web server and web framework that's written to go fast. It allow

Sanic Community Organization 16.7k Jan 8, 2023
Fast, asynchronous and elegant Python web framework.

Warning: This project is being completely re-written. If you're curious about the progress, reach me on Slack. Vibora is a fast, asynchronous and eleg

vibora.io 5.7k Jan 8, 2023
Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.

Tornado Web Server Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed. By using non-blocking ne

null 20.9k Jan 1, 2023
Async Python 3.6+ web server/framework | Build fast. Run fast.

Sanic | Build fast. Run fast. Build Docs Package Support Stats Sanic is a Python 3.6+ web server and web framework that's written to go fast. It allow

Sanic Community Organization 16.7k Dec 28, 2022