Объект запроса Flask всегда пуст (GET и POST) - PullRequest
0 голосов
/ 09 ноября 2018

это код:

from flask import Flask
from flask import request, redirect, url_for, render_template
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres:root@localhost/gradelink'
db = SQLAlchemy(app)

class Location(db.Model):
    __tablename__ = 'location'
    id = db.Column('id', db.Integer, primary_key=True)
    location_name = db.Column('location_name', db.String(250), unique=True)

    def __init__(self, location_name):
        self.location_name = location_name

    def __repr__(self):
        return '<Location %r' % self.location_name

@app.route('/')
def index():
    return render_template('home.html');

@app.route('/location', methods=['GET', 'POST'])
def location():
    return render_template('location.html');

@app.route('/post_location', methods=['POST'])
def post_location():
    if request.method == "POST":
        location_n = request.form['location_name']

    return redirect(url_for('index'))

@app.route('/location_list', methods=['GET', 'POST'])
def location_list():
    locationList = Location.query.all()
    return render_template('location_list.html', locationList=locationList);

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

Я пробовал и с GET, и с POST, но все же, тот же результат

объект не имеет атрибута 'data'

объект не имеет атрибута 'form'

location_list отлично работает.

похоже, что запрос всегда пуст

моя форма представления html:

<!DOCTYPE html>
<html>
<head>
    <title>Location Form</title>
    <meta charset="utf-8" />
</head>
<body>
    <form method="post" action="/post_location">
    <label>Location name:</label>
    <input id="location_name" name="location_name" type="text" />
    <input type="submit" />
    </form>
</body>
</html>

Что я делаю не так?

РЕДАКТИРОВАТЬ 1:

Я пробовал это:

@app.route('/post_location', methods=['POST'])
def post_location():
    if request.method == "POST":
        location_n = request.form['location_name']

    return redirect(url_for('index'))

Теперь сообщение об ошибке:

У объекта 'function' нет атрибута 'method'

РЕДАКТИРОВАТЬ 2:

У меня нет функции с именем request, и у меня не так много других функций (это новый свежий проект)

Нет. У меня нет папок flask.py ни в одной из папок моего проекта.

РЕДАКТИРОВАТЬ 3: версии Flask и Python

C:\Users\Daniel>flask --version
Flask 1.0.2
Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit (AMD64)]

Traceback

builtins.AttributeError
AttributeError: 'function' object has no attribute 'method'

Traceback (most recent call last)
File "C:\Users\Daniel\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 2309, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\Daniel\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 2295, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\Daniel\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1741, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\Daniel\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\_compat.py", line 35, in reraise
raise value
File "C:\Users\Daniel\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\Daniel\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\Daniel\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\Daniel\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\_compat.py", line 35, in reraise
raise value
File "C:\Users\Daniel\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\Daniel\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:\myproject\flask\__init__.py", line 89, in post_location
if request.method == "POST":
AttributeError: 'function' object has no attribute 'method'

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Итак, я закрыл все, перезагрузил компьютер и python. Я получил другую ошибку (в некоторых строках вместо отступа TAB вместо пробела), но ее легко исправить, и тогда все работало нормально.

0 голосов
/ 09 ноября 2018

Перед вашим местоположениемName введите if request.method == POST: Затем нажмите на все, что ниже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...