WebSocket support for Flask

Related tags

Flask flask-sock
Overview

flask-sock

WebSocket support for Flask

Installation

pip install flask-sock

Example

from flask import Flask, render_template
from flask_sock import Sock

app = Flask(__name__)
sock = Sock(app)


@sock.route('/echo')
def echo(sock):
    while True:
        data = sock.receive()
        sock.send(data)

Running

To run an application that uses this package, you need to use a supported web server. At this time the supported servers are:

  • Werkzeug (Flask development server)
  • Gunicorn

Running with Werkzeug

Werkzeug supports WebSocket routing in version 2, which at this time hasn't been officially released. You can install a supported release candidate with the following command:

pip install "werkzeug>=2.0.0rc3"

To run your application use the normal method that you always use. Both the flask run and app.run() methods of starting the Flask application should work.

Running with Gunicorn

To use this package with Gunicorn you need to keep in mind that each active WebSocket client will use up a worker. The most practical way to run a WebSocket server is to use the --threads option to allocate the number of clients that you need:

gunicorn -b :5000 --threads 100 module:app

It is also okay to use multiple workers, each with a number of allocated threads:

gunicorn -b :5000 --workers 4 --threads 100 module:app
Comments
  • registering blueprint with flask-sock Sock object

    registering blueprint with flask-sock Sock object

    I am trying to convert from flask-sockets but I used blueprints before, having so many routes in my project for normal webpages, and multiple uses of websockets.

    I tried simply replacing my flask-sockets import with flask-sock, but get this error:

        sockets.register_blueprint(vnc.vnc_bp, url_prefix=r'/')
    AttributeError: 'Sock' object has no attribute 'register_blueprint'
    

    how can I proceed?

    question 
    opened by nmz787-intel 14
  • The Error

    The Error "TypeError: __init__() got an unexpected keyword argument 'websocket'" is confusing

    Like title, the error

    "TypeError: init() got an unexpected keyword argument 'websocket'"

    will prompt up out of random, i checked its not my code syntax error or what not, because when i restart my server, its worked again

    Here is the stack trace after i ran 'flask run --host=0.0.0.0'

    ` * Serving Flask app "./run.py"

    • Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
    • Debug mode: off Traceback (most recent call last): File "/usr/bin/flask", line 11, in load_entry_point('Flask==1.1.1', 'console_scripts', 'flask')() File "/usr/lib/python3/dist-packages/flask/cli.py", line 966, in main cli.main(prog_name="python -m flask" if as_module else None) File "/usr/lib/python3/dist-packages/flask/cli.py", line 586, in main return super(FlaskGroup, self).main(*args, **kwargs) File "/usr/lib/python3/dist-packages/click/core.py", line 717, in main rv = self.invoke(ctx) File "/usr/lib/python3/dist-packages/click/core.py", line 1137, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/usr/lib/python3/dist-packages/click/core.py", line 956, in invoke return ctx.invoke(self.callback, **ctx.params) File "/usr/lib/python3/dist-packages/click/core.py", line 555, in invoke return callback(*args, **kwargs) File "/usr/lib/python3/dist-packages/click/decorators.py", line 64, in new_func return ctx.invoke(f, obj, *args, **kwargs) File "/usr/lib/python3/dist-packages/click/core.py", line 555, in invoke return callback(*args, **kwargs) File "/usr/lib/python3/dist-packages/flask/cli.py", line 848, in run_command app = DispatchingApp(info.load_app, use_eager_loading=eager_loading) File "/usr/lib/python3/dist-packages/flask/cli.py", line 305, in init self._load_unlocked() File "/usr/lib/python3/dist-packages/flask/cli.py", line 330, in _load_unlocked self._app = rv = self.loader() File "/usr/lib/python3/dist-packages/flask/cli.py", line 388, in load_app app = locate_app(self, import_name, name) File "/usr/lib/python3/dist-packages/flask/cli.py", line 240, in locate_app import(module_name) File "/home/ubuntu/f3_portal/run.py", line 2, in app = create_app() File "/home/ubuntu/f3_portal/f3portal/init.py", line 40, in create_app import f3portal.socket.api File "/home/ubuntu/f3_portal/f3portal/socket/api.py", line 10, in def instance_state(ws): File "/home/ubuntu/.local/lib/python3.8/site-packages/flask_sock/init.py", line 31, in decorator return (self.app or self.bp).route(path, **kwargs)(websocket_route) File "/usr/lib/python3/dist-packages/flask/app.py", line 1314, in decorator self.add_url_rule(rule, endpoint, f, **options) File "/usr/lib/python3/dist-packages/flask/app.py", line 98, in wrapper_func return f(self, *args, **kwargs) File "/usr/lib/python3/dist-packages/flask/app.py", line 1274, in add_url_rule rule = self.url_rule_class(rule, methods=methods, **options) TypeError: init() got an unexpected keyword argument 'websocket'`

    if try to simulate this error, it would not generate, this appear out of random

    question 
    opened by lancezhaozai 12
  • Timeouts after 10 mins with error code 1006

    Timeouts after 10 mins with error code 1006

    I have a flask-sock app deployed using gunicorn and nginx. I get disconnected after 10 minutes (sometimes sooner) with the following error: Disconnected (code: 1006, reason: "")

    Is there a way to configure the timeout length?

    I'm running it with: gunicorn --bind 127.0.0.1:5655 --workers 4 --threads 20 wsgi:app

    enhancement 
    opened by imrankhan17 9
  • Server side error with `ws.close()`

    Server side error with `ws.close()`

    I've been using this package for some time and it works very well. I'm still trying to determine the best way to close a websocket connection using ws.close(). After a connection is made by a client and the data has finished being sent, I get this error on the server side (full stack trace below):

    wsproto.utilities.LocalProtocolError: Connection cannot be closed in state ConnectionState.CLOSED
    

    Here is the code to reproduce this error. I'm running Python 3.8.5 on Ubuntu.

    $ mkdir flask-sock-example
    $ cd flask-sock-example
    $ python3 -m venv env
    $ source env/bin/activate
    $ pip install Flask==1.1.2 flask-sock==0.3.0 "werkzeug>=2.0.0rc3"
    $ pip freeze
    click==8.0.0
    Flask==1.1.2
    flask-sock==0.3.0
    h11==0.12.0
    itsdangerous==2.0.0
    Jinja2==3.0.0
    MarkupSafe==2.0.0
    simple-websocket==0.1.0
    Werkzeug==2.0.0
    wsproto==1.0.0
    

    In a file called app.py:

    from flask import Flask
    from flask_sock import Sock
    import time
    
    app = Flask(__name__)
    sock = Sock(app)
    
    @sock.route('/stream')
    def stream(ws):
        for i in range(3):
            ws.send(i)
            time.sleep(1)
    
        ws.close()
    

    I use flask run to start the application. In another tab, I'm using wscat to connect to the websocket on localhost:

    $ wscat -c ws://127.0.0.1:5000/stream
    Connected (press CTRL+C to quit)
    < 0
    < 1
    < 2
    Disconnected (code: 1000, reason: "")
    $ 
    

    This works fine, however on the server side I get the aforementioned error:

     $ flask run
     * Environment: production
       WARNING: This is a development server. Do not use it in a production deployment.
       Use a production WSGI server instead.
     * Debug mode: off
     * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
    127.0.0.1 - - [14/May/2021 12:57:09] "GET /stream HTTP/1.1" 200 -
    Exception in thread Thread-2:
    Traceback (most recent call last):
      File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
        self.run()
      File "/usr/lib/python3.8/threading.py", line 870, in run
        self._target(*self._args, **self._kwargs)
      File "/home/imrankhan/flask-sock-example/env/lib/python3.8/site-packages/simple_websocket/ws.py", line 89, in _thread
        self.connected = self._handle_events()
      File "/home/imrankhan/flask-sock-example/env/lib/python3.8/site-packages/simple_websocket/ws.py", line 99, in _handle_events
        out_data += self.ws.send(event.response())
      File "/home/imrankhan/flask-sock-example/env/lib/python3.8/site-packages/wsproto/__init__.py", line 62, in send
        data += self.connection.send(event)
      File "/home/imrankhan/flask-sock-example/env/lib/python3.8/site-packages/wsproto/connection.py", line 99, in send
        raise LocalProtocolError(
    wsproto.utilities.LocalProtocolError: Connection cannot be closed in state ConnectionState.CLOSED
    

    Alternatively, if I remove the ws.close() line, I don't get an error on the server, instead I see this on the client:

    $ wscat -c ws://127.0.0.1:5000/stream
    Connected (press CTRL+C to quit)
    < 0
    < 1
    < 2
    error: Invalid WebSocket frame: RSV1 must be clear
    > $ 
    
    question 
    opened by imrankhan17 8
  • Make this the recommended replacement for flask-sockets?

    Make this the recommended replacement for flask-sockets?

    The popular flask-sockets project has recently been archived. It seems like this project should be its spiritual successor.

    @edmorley, would it be appropriate to direct people to this project given that no one seems to have forked flask-sockets in order to continue maintaining it?

    question 
    opened by rmorshea 7
  • Possibility to ws.send from another Flask route

    Possibility to ws.send from another Flask route

    Hi Miguel, I have a Flask route which accepts a POST request with a parameters. Given one of the parameters is 'hello', is it possible to ws.send this 'hello' string to one of the connected ws clients? My app is purely server to client messages. Thanks!

    question 
    opened by danohn 7
  • Flask-Sock and use in GCP AppEngine ?

    Flask-Sock and use in GCP AppEngine ?

    Hello,

    I am trying to run flask-sock over a GCP AppEngine instance. When running the script over it I am having multiple issue:

     Uncaught DOMException: Failed to execute 'send' on 'WebSocket': Still in CONNECTING state.
        at HTMLDocument.<anonymous> 
    

    In the HTML header I have: <script>const socket = new WebSocket('wss://' + 'specificdomain.ey.r.appspot.com:8080' + '/customdimfrom0');</script>

    I am running the script over a appspot.com subdomain (generated by google) And no error from the console to help find out the current problem.

    I am sure it's the way on how the websocket connect to the appengine instance and I am clueless on how to fix this so far. (been trying

    Any tips or similar issue when running the library over appengine instance ? Is there additional configuration on the appengine to accept incoming websocket? or maybe need to update the current url to initiate a websocket to the backend.

    Thanks !

    question 
    opened by tonyrb 7
  • ws methods called on a ws that is already closed close current connection silently

    ws methods called on a ws that is already closed close current connection silently

    I am trying to keep track of connected clients and send messages to them. I connect with one client, store its websocket in memory, and then disconnect. I then connect with another client and try to interact with the websocket of the previous client that is no longer open.

    When receive or send are called on a websocket that is already closed, the current connection closes with 1000 Normal Closure. What I would expect is an exception to be thrown so that I can catch it, remove the dead websocket object, and continue on with the current websocket.

    I have included code to reproduce this issue and example output.

    app.py

    clients = []
    
    
    @sock.route("/test")
    def test(ws):
        global clients
    
        clients.append(ws)
        print(clients, flush=True)
    
        while True:
            print("Waiting to receive data...", flush=True)
            data = clients[0].receive()
            print("...done", flush=True)
            clients[0].send(data)
    

    Client

    $ wscat --connect 'ws://localhost:5000/test'
    Connected (press CTRL+C to quit)
    > hello, world
    < hello, world
    > $ ^C
    $ wscat --connect 'ws://localhost:5000/test'
    Connected (press CTRL+C to quit)
    Disconnected (code: 1000, reason: "")
    $ 
    

    STDOUT

    api_1  | [<simple_websocket.ws.Server object at 0x7fc2af10e640>]
    api_1  | Waiting to receive data...
    api_1  | ...done
    api_1  | Waiting to receive data...
    api_1  | [<simple_websocket.ws.Server object at 0x7fc2af10e640>, <simple_websocket.ws.Server object at 0x7fc2af17a610>]
    api_1  | Waiting to receive data...
    api_1  | 172.18.0.1 - - [03/Oct/2021 01:39:55] "GET /test HTTP/1.1" 200 -
    
    question 
    opened by aentwist 7
  • Resources not being released - Too many open files

    Resources not being released - Too many open files

    I'm using this lovely library to facilitate socket communication. I really like this because it's so light. However, I ran into an issue where I've noticed that resources are not being released.

    Issue

    I was running a server for an extended period of time and repeatedly opening and close the page. It got to a point where the server started throwing "too many files open errors". I looked more into this and found that there are a lot of eventpoll handles open. This can be seen using the lsof command on the PID of the flask processes.

    COMMAND   PID  USER   FD      TYPE     DEVICE SIZE/OFF    NODE NAME
    ...
    python  26774 chris   15u  a_inode       0,13        0    7189 [eventpoll]
    

    Repro

    Create basic setup for web socket.

    Files:

    # app.py
    
    from flask import Flask, render_template
    from flask_sock import Sock
    
    
    app = Flask(__name__)
    sock = Sock(app)
    
    
    @app.route("/")
    def main() -> str:
      return render_template("main.html")
    
    @sock.route("/echo")
    def echo(ws) -> None:
      try:
        while True:
          data = ws.receive()
          ws.send(data)
      finally:
        print("echo end")
    
    # main.html
    <!doctype html>
    <html lang="en"><head></head><body>
    <script>
    
          let ws = new WebSocket(`ws://${location.host}/echo`);
          ws.onopen = () => {
            ws.send("test");
          }
    </script>
    </body></html>
    

    Steps:

    1. Open the webpage and close it.
    2. On the server, after every time the page gets opened, use the following command to count eventpoll handles:
    function countpoll {
      for p in $(pgrep -f "flask run"); do
        lsof -p $p | grep eventpoll | wc -l
      done;
    }
    

    You'll see the number go up after every time the page gets reloaded.

    System Info

    I've reproduced this issue on Ubuntu and Raspian OS environments.

    I'm using Python 3.9.2

    Here's the Python packages I'm using.

    flask-sock==0.5.2
    python-socketio==5.7.2
    simple-websocket==0.8.1
    websockets==10.4
    
    opened by cpagravel 6
  • Compatibility with python-livereload?

    Compatibility with python-livereload?

    I have a frontend/backend set up that uses flask-sock and works well when I start my application with:

    FLASK_APP=backend FLASK_ENV=development flask run
    

    However, when I try to start my application using the API of python-livereload as follows:

    from backend import app
    from livereload import Server, shell
    
    if __name__ == '__main__':
        app.debug = True
        server = Server(app.wsgi_app)
        server.watch('backend/static')
        server.serve(port=5000)
    

    I am getting the following back trace:

    [E 220719 13:44:59 web:1798] Uncaught exception GET /stream (127.0.0.1)
        HTTPServerRequest(protocol='http', host='localhost:5000', method='GET', uri='/stream', version='HTTP/1.1', remote_ip='127.0.0.1')
        Traceback (most recent call last):
          File "/usr/local/lib/python3.8/dist-packages/tornado/web.py", line 1690, in _execute
            result = self.prepare()
          File "/usr/local/lib/python3.8/dist-packages/tornado/web.py", line 3056, in prepare
            self.fallback(self.request)
          File "/usr/local/lib/python3.8/dist-packages/livereload/server.py", line 112, in __call__
            app_response = self.wsgi_app(
          File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 2076, in wsgi_app
            response = self.handle_exception(e)
          File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 2073, in wsgi_app
            response = self.full_dispatch_request()
          File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 1519, in full_dispatch_request
            rv = self.handle_user_exception(e)
          File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 1517, in full_dispatch_request
            rv = self.dispatch_request()
          File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 1503, in dispatch_request
            return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
          File "/usr/local/lib/python3.8/dist-packages/flask_sock/__init__.py", line 56, in websocket_route
            ws = Server(request.environ, **current_app.config.get(
          File "/usr/local/lib/python3.8/dist-packages/simple_websocket/ws.py", line 301, in __init__
            raise RuntimeError('Cannot obtain socket from WSGI environment.')
        RuntimeError: Cannot obtain socket from WSGI environment.
    

    I am not sure how to interpret the error Cannot obtain socket from WSGI environment. As far as I understand, when I use flask run, I am using the Werkzeug framework which is supported by flask-sock and from the back trace python-livereload is using Tornado which perhaps is not supported?

    This is all a bit confusing since from #29 it is mentioned:

    Flask-Sock uses its own WebSocket implementation (provided by the wsproto package) instead of relying on the web server's own WebSocket support

    So I would have thought that it did not matter what underlying framework is being used...

    question 
    opened by allsey87 6
  • Example Error

    Example Error

    The example code does not work.

    I have tried running the code in the example folder and have received the following error:

    Firefox can’t establish a connection to the server at ws://localhost:5000/echo.
    

    However, the following command does work:

    wscat --connect ws://localhost:5000/echo
    

    I have installed the following Python packages:

    $ pip freeze
    click==8.0.0
    colorama==0.4.4
    Flask==2.0.0
    flask-sock==0.3.0
    h11==0.12.0
    itsdangerous==2.0.0
    Jinja2==3.0.0
    MarkupSafe==2.0.0
    simple-websocket==0.2.0
    Werkzeug==2.0.0
    wsproto==1.0.0
    
    question 
    opened by jacektrocinski 6
  • Unexpected behavior

    Unexpected behavior

    I tried copying your example (https://blog.miguelgrinberg.com/post/add-a-websocket-route-to-your-flask-2-x-application) and it just spams the page with this rendering the entire browser unresponsive. Any idea why? image

    question 
    opened by Yakabuff 1
  • How to extend this to work with uWSGI?

    How to extend this to work with uWSGI?

    Hi, my understanding is that this only works with the Flask dev server, and with gunicorn.

    How can one extend this to work with uwsgi too?

    I got flask-socketio working with uwsgi (and gevent) doing something like:

    uwsgi --module app:app  --touch-reload app.py  --master  --http :8000  --http-websockets  --gevent 1024
    

    but (unsurprisingly) the same thing doesn't work with flask-sock, probably because support for uwsgi needs to be specifically implemented. (But how?)

    question 
    opened by etale-cohomology 2
  • flask-sock in docker-gunicorn environment always returns 404

    flask-sock in docker-gunicorn environment always returns 404

    Hi Miguel,

    i have an issue with flask-sock in an containerized application. As I tested my app in a local environment, everything works as expected, the javascript in my html-doc connects properly and the communication runs continuously.

    But now I switched to an containerized environment using gunicorn as webserver started by supervisor and now the server returns always a 404 as the html doc calls the websocket. I tried several configs to figure out what's happening, but I have no more ideas what to do.

    Here are the crucial parts of code, config and log:

    app.py

    ...
    app = flask.Flask(
        __name__,
        static_folder = '/www/static'
    )
    
    ws = flask_sock.Sock()
    ...
    
    def create_app():
        ...
        app.config['SOCK_SERVER_OPTIONS'] = {
            'ping_interval' : 5
        }
        ...
        ws.init_app(app)
        ...
        from .views import default
        ... 
        return app
    

    default.py

    @ws.route('/api/ws')
    def wsapi(ws):
        app.logger.info('ws call')
        while True:
            time.sleep(1)
            ws.send('Hello')
            app.logger.info('ws cycle')
    

    index.html

                const ws = new WebSocket('ws://'+location.host+'/api/ws');
    
                ws.addEventListener('open', ev => {
                    console.log('WS OPENED!');
                });
    
                ws.addEventListener('close', ev => {
                    console.log('WS CLOSED!');
                });
    
                ws.addEventListener('message', ev => {
                    console.log(ev.data)
                });
    

    supervisord.conf

    ...
    [program:gunicorn]
    command=/www/venv/bin/gunicorn wsgi:app -b :80 --reload -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker --workers 4 --threads 100
    directory=/www/app
    user=www-data
    group=www-data
    autostart=true
    autorestart=true
    stdout_logfile=/dev/stdout
    stdout_logfile_maxbytes=0
    stderr_logfile=/dev/stderr
    stderr_logfile_maxbytes=0
    ...
    

    log (generated with app.before_request & app.after_request)

    [2022-05-12 08:23:59,915] INFO in app: <Request 'http://10.1.7.3:9500/api/ws' [GET]>
    [2022-05-12 08:23:59,917] INFO in app: <Response streamed [404 NOT FOUND]>
    

    Maybe you have some hints for me, how to use your flask-extension properly.

    Cheers, Carsten

    bug 
    opened by ch-IAE-HSN 5
Owner
Miguel Grinberg
Miguel Grinberg
flask-apispec MIT flask-apispec (🥉24 · ⭐ 520) - Build and document REST APIs with Flask and apispec. MIT

flask-apispec flask-apispec is a lightweight tool for building REST APIs in Flask. flask-apispec uses webargs for request parsing, marshmallow for res

Joshua Carp 617 Dec 30, 2022
Adds SQLAlchemy support to Flask

Flask-SQLAlchemy Flask-SQLAlchemy is an extension for Flask that adds support for SQLAlchemy to your application. It aims to simplify using SQLAlchemy

The Pallets Projects 3.9k Dec 29, 2022
Cross Origin Resource Sharing ( CORS ) support for Flask

Flask-CORS A Flask extension for handling Cross Origin Resource Sharing (CORS), making cross-origin AJAX possible. This package has a simple philosoph

Cory Dolphin 803 Jan 1, 2023
MongoEngine flask extension with WTF model forms support

Flask-MongoEngine Info: MongoEngine for Flask web applications. Repository: https://github.com/MongoEngine/flask-mongoengine About Flask-MongoEngine i

MongoEngine 815 Jan 3, 2023
i18n and l10n support for Flask based on Babel and pytz

Flask Babel Implements i18n and l10n support for Flask. This is based on the Python babel module as well as pytz both of which are installed automatic

null 397 Dec 15, 2022
Pagination support for flask

flask-paginate Pagination support for flask framework (study from will_paginate). It supports several css frameworks. It requires Python2.6+ as string

Lix Xu 264 Nov 7, 2022
Adds Injector support to Flask.

Flask-Injector Adds Injector support to Flask, this way there's no need to use global Flask objects, which makes testing simpler. Injector is a depend

Alec Thomas 246 Dec 28, 2022
Adds GraphQL support to your Flask application.

Flask-GraphQL Adds GraphQL support to your Flask application. Usage Just use the GraphQLView view from flask_graphql from flask import Flask from flas

GraphQL Python 1.3k Jan 3, 2023
Pagination support for flask

flask-paginate Pagination support for flask framework (study from will_paginate). It supports several css frameworks. It requires Python2.6+ as string

Lix Xu 223 Feb 17, 2021
Adds GraphQL support to your Flask application.

Flask-GraphQL Adds GraphQL support to your Flask application. Usage Just use the GraphQLView view from flask_graphql from flask import Flask from flas

GraphQL Python 1.2k Feb 17, 2021
An extension to add support of Plugin in Flask.

An extension to add support of Plugin in Flask.

Doge Gui 31 May 19, 2022
Flask-Bcrypt is a Flask extension that provides bcrypt hashing utilities for your application.

Flask-Bcrypt Flask-Bcrypt is a Flask extension that provides bcrypt hashing utilities for your application. Due to the recent increased prevelance of

Max Countryman 310 Dec 14, 2022
Flask-Rebar combines flask, marshmallow, and swagger for robust REST services.

Flask-Rebar Flask-Rebar combines flask, marshmallow, and swagger for robust REST services. Features Request and Response Validation - Flask-Rebar reli

PlanGrid 223 Dec 19, 2022
Flask-Bcrypt is a Flask extension that provides bcrypt hashing utilities for your application.

Flask-Bcrypt Flask-Bcrypt is a Flask extension that provides bcrypt hashing utilities for your application. Due to the recent increased prevelance of

Max Countryman 282 Feb 11, 2021
Flask-Starter is a boilerplate starter template designed to help you quickstart your Flask web application development.

Flask-Starter Flask-Starter is a boilerplate starter template designed to help you quickstart your Flask web application development. It has all the r

Kundan Singh 259 Dec 26, 2022
Brandnew-flask is a CLI tool used to generate a powerful and mordern flask-app that supports the production environment.

Brandnew-flask is still in the initial stage and needs to be updated and improved continuously. Everyone is welcome to maintain and improve this CLI.

brandonye 4 Jul 17, 2022
Flask Project Template A full feature Flask project template.

Flask Project Template A full feature Flask project template. See also Python-Project-Template for a lean, low dependency Python app. HOW TO USE THIS

Bruno Rocha 96 Dec 23, 2022
Flask-app scaffold, generate flask restful backend

Flask-app scaffold, generate flask restful backend

jacksmile 1 Nov 24, 2021
Flask pre-setup architecture. This can be used in any flask project for a faster and better project code structure.

Flask pre-setup architecture. This can be used in any flask project for a faster and better project code structure. All the required libraries are already installed easily to use in any big project.

Ajay kumar sharma 5 Jun 14, 2022