Отправить запрос в Flask и Bootstrap, не добавляя данные в базу данных - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь использовать формы в Bootstrap и добавить поля данных в базу данных, используя SQLAlchemy и Flask, но когда я пытаюсь отправить его, он не перенаправляет на нужную мне страницу.

Это мой файл project_cat.py:

   @app.route('/category/<int:category_id>/items/new/', methods=['GET', 'POST'])
   def newMenuItem(category_id):
if 'username' not in login_session:
    return redirect('/login')
category = session.query(Category).filter_by(id=category_id).one()
if login_session['user_id'] != category.user_id:
    return "<script>function myFunction() {alert('You are not authorized to add menu items to this restaurant. Please create your own restaurant in order to add items.');}</script><body onload='myFunction()'>"
    if request.method == 'POST':
        NewItem = Item(name=request.form['name'], description=request.form['description'], price=request.form['price'], category_id = category_id, user_id=category.user_id)
        session.add(NewItem)
        session.commit()
        flash('New Menu %s Item Successfully Created' % (NewItem.name))
        return redirect(url_for('showMenu', category_id=category_id))
else:
    return render_template('newmenuitem.html', category_id=category_id)

newmenuitem.html:

    <div class="row">
    <div class="col-md-6 col-md-offset-1 padding-top">
        <form action="#" method = "POST">
            <div class="form-group">
                <label for="name">Name:</label>
                <input type ="text" maxlength="50" class="form-control" name="name" placeholder="Name of the Item">

                <label for="description">Description:</label>
                <textarea class="form-control" maxlength="250" rows="3" name="description" placeholder="Description of the Item"></textarea>

                <label for="price">Price:</label>
                <div class="input-group">
                    <div class="input-group-addon">$</div>
                    <input type ="text" class="form-control" maxlength="10" name="price" placeholder="Price in $">
                </div>
                <div>
                <button type="submit" class="btn btn-default" id="submit" type="submit">
                <span class="glyphicon glyphicon-glass" aria-hidden="true"></span>Create</button>
                </div>
            </div>
        </form>
    </div>

Эван после добавления url_for в действии делает то же самое.

Файл базы данных:

    class Item(Base):
__tablename__ = 'items'

name = Column(String(80), nullable=False)
id = Column(Integer, primary_key=True)
date = Column(DateTime, nullable =  False)
description = Column(String(250))
category_id = Column(Integer, ForeignKey('category.id'))
category = relationship(Category)
user_id = Column(Integer, ForeignKey('user.id'))
user = relationship(User)

1 Ответ

0 голосов
/ 25 июня 2018

ошибка связана с тем, как вы написали свой оператор if else в project_cat.py

, если я правильно понял вашу проблему, то это то, что вы хотите

@app.route('/category/<int:category_id>/items/new/', methods=['GET', 'POST'])
def newMenuItem(category_id):
    if 'username' not in login_session:
        return redirect('/login')
    category = session.query(Category).filter_by(id=category_id).one()
    if login_session['user_id'] != category.user_id:
        return "<script>function myFunction() {alert('You are not authorized to add menu items to this restaurant. Please create your own restaurant in order to add items.');}</script><body onload='myFunction()'>"
    if request.method == 'POST':
        NewItem = Item(name=request.form['name'], description=request.form['description'], price=request.form['price'], category_id = category_id, user_id=category.user_id)
        session.add(NewItem)
        session.commit()
        flash('New Menu %s Item Successfully Created' % (NewItem.name))
        return redirect(url_for('showMenu', category_id=category_id))
    else:
        return render_template('newmenuitem.html', category_id=category_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...