Я довольно плохо знаком с программированием и сам тренируюсь.
Я пытаюсь создать регистрационную форму для веб-сайта, используя комбинацию: - Flask - SQLAlchemy - WTForms
Я столкнулся со многими ошибками, и проверка документации была полезна до сих пор. К сожалению, я не могу понять, как решить эту проблему, глядя на документацию. Если вы знаете, я был бы признателен, если бы вы сообщили мне, где я могу быть самодостаточным в следующий раз. Когда я отправляю данные на веб-сайт для регистрации пользователя, появляется следующая ошибка: AttributeError: 'scoped_session' object has no attribute 'session'
Вот код:
import os
from flask import Flask, session, render_template, url_for, request
from flask_session import Session
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from forms import RegistrationForm
from models import User
app = Flask(__name__)
# Check for environment variable
if not os.getenv("DATABASE_URL"):
raise RuntimeError("DATABASE_URL is not set")
# Set up a secret key for CSRF protection in forms (wtforms)
SECRET_KEY = os.urandom(32)
app.config['SECRET_KEY'] = SECRET_KEY
# Configure session to use filesystem
app.config["SESSION_PERMANENT"] = False
app.config["SESSION_TYPE"] = "filesystem"
Session(app)
# Adding this to avoid it throwing an error
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
# Set up database
engine = create_engine(os.getenv("DATABASE_URL"))
db = scoped_session(sessionmaker(bind=engine))
...
@app.route("/signup", methods=["GET", "POST"])
def signup():
# Get data from the form based on the class
form = RegistrationForm(request.form)
# When submitting data to the form
if request.method == "POST":
# Check all validations are correct
if form.validate_on_submit():
# Check whether the name already exists in the database
namecheck = db.session.query(User).filter_by(uname="form.username").first()
checker = "form.username.data"
# namecheck = User.query.filter_by(uname="form.username").first()
if (namecheck == checker):
return render_template("error.html", message="Username already exists! Please pick another one.")
else:
# creates a "user" based on the class "User()" defined in models.py and gives it the data from the form
user = User(uname="form.username.data", psswd="form.password.data")
db.session.add(user)
db.session.commit()
return render_template("success.html", message="You have registered!")
# if validations are NOT correct, load the form again with the right error messages
else:
return render_template("signup.html", form = form)
else:
return render_template("signup.html", form = form)
Буду очень признателен, если кто-нибудь из вас скажет мне, что я делаю неправильно.