ja schon wieder ich


Also wie in meinem letzten Beitrag erwähnt, folge ich einem Web-Developer Python Kurs, in dem wir pypi nach schreiben mit allem drum und dran. Nun und ich scheiter an den basics.... -.-
Ich verwende PyCharm mit Flask
Wenn ich meine app zurzeit starte bekomme ich immer 404 Error. Somit scheint irgendwas mit meinen Routes nicht zu stimmen aber ich komme einfach nicht drauf was es ist. Das ist mein Code:
app.py:
Code: Alles auswählen
import flask
app = flask.Flask(__name__)
def main():
register_blueprints()
app.run(debug=True)
def register_blueprints():
from pypi_org.views import home_views
from pypi_org.views import package_views
app.register_blueprint(home_views.blueprint)
app.register_blueprint(package_views.blueprint)
if __name__ == '__main__':
main()
home_views.py:
Code: Alles auswählen
import flask
from pypi_org.infrastructer.view_modifiers import response
import pypi_org.services.package_service as packages_service
blueprint = flask.Blueprint('home', __name__, template_folder='templates')
# response funktioniert nur wegen dem view_modifiers.py file in infrastructer
# ## Er hat es selber geschrieben!
# #https://github.com/talkpython/data-driven-web-apps-with-flask/tree/master/app/ch05_jinja_templates/final/pypi_org/infrastructure
@blueprint.route('/')
@response(template_file='home/index.html')
def index():
test_packages = packages_service.get_latest_packages()
return {'packages': test_packages}
# return flask.render_template('home/index.html', packages = test_packages)
## Ansonsten ist dies der "normale" Weg.
@blueprint.route('/about')
@response(template_file='home/about.html')
def about():
return {}
Code: Alles auswählen
import flask
from pypi_org.infrastructer.view_modifiers import response
import pypi_org.services.package_service as packages_service
blueprint = flask.Blueprint('packages', __name__, template_folder='templates')
@blueprint.route('/package/<package_name>')
@response(template_file='packages/details.html')
def package_details(package_name: str):
return 'Package details for {}'.format(package_name)
#return flask.render_template('home/index.html', packages = test_packages) ## Ansonsten ist dies der "normale" Weg.
Falls sich jemand fragt was dieser View modifier ist, das habe ich als code snippet aus dem Kurs welches diese Zeile ermöglicht:
Code: Alles auswählen
@response(template_file='home/index.html')
Der vollständigkeitshalber ist hier noch das snippet:
Code: Alles auswählen
from functools import wraps
import flask
import werkzeug
import werkzeug.wrappers
def response(*, mimetype: str = None, template_file: str = None):
def response_inner(f):
# print("Wrapping in response {}".format(f.__name__), flush=True)
@wraps(f)
def view_method(*args, **kwargs):
response_val = f(*args, **kwargs)
if isinstance(response_val, werkzeug.wrappers.Response):
return response_val
if isinstance(response_val, flask.Response):
return response_val
if isinstance(response_val, dict):
model = dict(response_val)
else:
model = dict()
if template_file and not isinstance(response_val, dict):
raise Exception(
"Invalid return type {}, we expected a dict as the return value.".format(type(response_val)))
if template_file:
response_val = flask.render_template(template_file, **response_val)
resp = flask.make_response(response_val)
resp.model = model
if mimetype:
resp.mimetype = mimetype
return resp
return view_method
return response_inner
#
# def template(template_file: str = None):
# def template_inner(f):
# @wraps(f)
# def view_method(*args, **kwargs):
# data_dict = f(*args, **kwargs)
# if not isinstance(data_dict, dict):
# raise Exception(
# "Invalid return type {}, we expected a dict as the return value.".format(type(data_dict)))
#
# return flask.render_template(template_file, **data_dict)
#
# return view_method
#
# return template_inner