Проблемы появилась когда делал функционал странички резервирования столика. После ввода всех данных, появляется ошибка - “TypeError: The view function for ‘booking’ did not return a valid response. The function either returned None or ended without a return statement.”
Как бы понятно что функция должна хоть что-то возвращать и в самой фунции я прописал return в случае GET запроса и тот который должен сделать редирект на главную страницу в случае удачного POST запроса.
Решил в функции booking перед return'ами поставить по print'у. Получается в консоли сначала появляется принт из exception и потом принт который после return render_template('booking.html')
Подскажите пожалуйста в чём может быть проблема и как её устранить.
Ниже привожу свой код:
Создаём таблицу:
from flask import Flask, request, redirect, render_template, url_for from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///restaurant_booking1.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) class Booking(db.Model): id = db.Column(db.Integer, primary_key=True) firstname = db.Column(db.String(50), nullable=False) lastname = db.Column(db.String(50), nullable=False) email = db.Column(db.String(20), nullable=False) phone = db.Column(db.String(50), nullable=False) birthdate = db.Column(db.String(50), nullable=False) booking_date = db.Column(db.String(50), nullable=False) booking_time = db.Column(db.String(50), nullable=False) guests_nr = db.Column(db.String(5), nullable=False) notes = db.Column(db.Text(1000)) def __repr__(self): return '<Booking %r>' % self.id
Функция booking:
@app.route('/booking', methods=['POST', 'GET']) def booking(): if request.method == 'POST': firstname = request.form['firstname'] lastname = request.form['lastname'] phone = request.form['phone'] email = request.form['email'] birthdate = request.form['birthdate'] booking_date = request.form['booking_date'] booking_time = request.form['booking_time'] guests_nr = request.form['guests_nr'] notes = request.form['notes'] reservation = Booking(firstname=firstname, lastname=lastname, email=email, phone=phone, birthdate=birthdate, booking_date=booking_date, booking_time=booking_time, guests_nr=guests_nr, notes=notes) try: db.session.add(reservation) db.session.commit() return redirect('/booking', code=303) except: return "An error has been occurred. Please, try again later" else: return render_template('booking.html')
html код (вдруг там вся проблема):
{% block body %} <div class="booking-container"> <form method="post"> <input type="text" name="firstname" id="firstname" class="form-control" placeholder="First Name" required> <input type="text" name="lastname" id="lastname" class="form-control" placeholder="Last Name" required> <input type="text" name="email" id="email" class="form-control" placeholder="Email" required> <input type="text" name="phone" id="phone" class="form-control" placeholder="Phone Number" required> <input type="text" name="birthdate" id="birthdate" class="form-control" placeholder="Date of Birth" required> <input type="text" name="booking_date" id="booking_date" class="form-control" placeholder="Reservation Date" required> <input type="text" name="booking_time" id="booking_time" class="form-control" placeholder="Reservation Time" required> <input type="text" name="guests_nr" id="guests_nr" class="form-control" placeholder="Number of Guests" required> <textarea name="notes" id="notes" class="form-control" placeholder="Notes"></textarea> <input type="submit" class="btn-submit" value="Sent"> </form> </div> {% endblock %}