Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Flask router from other file

I'm now structuring Flask application like below.

myserver
- server.py
- myapp
-- urls.py
-- models.py
-- views.py
-- consts.py

And my codes are here.

server.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

# Flask App
application = Flask(__name__)

# SQLAlchemy
application.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:./local.db"
db = SQLAlchemy(application)

if __name__ == "__main__":
    application.run(debug=True)

urls.py

from server import application
from . import views

@application.route('/')
def version():
    return views.version()

But when i run server.py and open http://localhost:5000/ server says 404 Not Found.

So I searched on stackoverflow, I found some descriptions about Blueprint. And I make blueprint named app like app = Blueprint('app', __name__) and register it from server.py But I got AttributeError: module 'urls' has no attribute 'app' .

How can i define url routers in other file?

like image 961
kde713 Avatar asked Dec 15 '22 00:12

kde713


1 Answers

Here example with Blueprint. Structure of files:

/project_folder
   server.py
   urls.py
   urls2.py

server.py:

from flask import Flask
from urls import urls_blueprint
from urls2 import urls2_blueprint


app = Flask(__name__)
# register routes from urls
app.register_blueprint(urls_blueprint)
# we can register routes with specific prefix
app.register_blueprint(urls2_blueprint, url_prefix='/urls2')

if __name__ == "__main__":
    app.run(debug=True)

urls.py:

from flask import Blueprint

urls_blueprint = Blueprint('urls', __name__,)


@urls_blueprint.route('/')
def index():
    return 'urls index route'

urls2.py:

from flask import Blueprint
urls2_blueprint = Blueprint('urls2', __name__,)


@urls2_blueprint.route('/')
def index():
    return 'urls2 index route'

Run server and open http://localhost:5000/ and http://localhost:5000/urls2/.

Hope this helps.

like image 193
Danila Ganchar Avatar answered Dec 16 '22 13:12

Danila Ganchar