Несколько маршрутов и функции в рамках бутылки
Я пытаюсь изменить уже существующий код, просто добавьте форму, чтобы добавить фотографии.
питон:
@route('/photos/add')
@jinja_view('add.html')
@post('/photos/add')
def upload_func():
upload = request.files.get('pic')
name, ext = os.path.splitext(upload.filename)
if ext not in ('.png', '.jpg', '.jpeg'):
return "ext is not allowed"
save_path = "/src/photo_gallery/photos"
upload.save(save_path)
return "photo is saved"
HTML:
<form action="/photos/add" method="post">
<div align="center">
<label>Picture</label>
<input type="file" name="pic" required>
</div>
<div>
<label>Info</label>
<input type="text" name="text">
</div>
<div>
<input type="submit" value="add">
</div>
</form>
журнал сервера: трассировка (последний вызов был последним): файл "/home/empty/python/bottle/lib/python3.5/site-packages/bottle.py", строка 862, в _handle return route.call(**args)
Файл "/home/empty/python/bottle/lib/python3.5/site-packages/bottle.py", строка 1740, в оболочке rv = callback(*a, **ka)
Файл "/home/empty/python/bottle/lib/python3.5/site-packages/bottle.py", строка 3635, в оболочке result = func(*args, **kwargs)
Файл "/home/empty/python/bottle/src/photo_gallery/app.py", строка 50, в имени upload_func, ext = os.path.splitext(upload.filename) AttributeError: у объекта 'NoneType' нет атрибута 'filename' 127.0.0.1 - - [22/Dec/2016 23:20:42] "GET /photos/add HTTP/1.1" 500 751
1 ответ
Вы связали путь URL /photos/add
к функции обратного вызова upload_func
, Похоже, вы хотите поддерживать два типа запросов (GET и POST), тогда декораторы функций должны выглядеть так:
@route('/photos/add', method=['GET', 'POST'])
@jinja_view('add.html')
def upload_func():
# ...
Взгляни на:
https://bottlepy.org/docs/dev/tutorial.html https://bottlepy.org/docs/dev/api.html
Также обратите внимание, что код не должен быть написан так - слишком сложный