Recibo un error al usar Flask cuando sigo un tutorial sobre el uso de Flash. Como soy un programador básico de Python, no entiendo por qué o qué tiene de malo.
Entonces, si no le importa explicarlo o agregar un enlace explicativo.
(No estoy seguro de lo que es importante, lo siento)
C:\Users\name\Desktop\Eeverything on this computer\GCSE\Computer Science\free-style\organised\website>python flaskblog.py C:\Users\name\Anaconda3\lib\site-packages\flask_sqlalchemy\__init__.py:835: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True or False to suppress this warning. 'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and ' Traceback (most recent call last): File "flaskblog.py", line 22, in <module> class Post(db.Model): File "C:\Users\name\Anaconda3\lib\site-packages\flask_sqlalchemy\model.py", line 67, in __init__ super(NameMetaMixin, cls).__init__(name, bases, d) File "C:\Users\name\Anaconda3\lib\site-packages\flask_sqlalchemy\model.py", line 121, in __init__ super(BindMetaMixin, cls).__init__(name, bases, d) File "C:\Users\name\Anaconda3\lib\site-packages\sqlalchemy\ext\declarative\api.py", line 75, in __init__ _as_declarative(cls, classname, cls.__dict__) File "C:\Users\name\Anaconda3\lib\site-packages\sqlalchemy\ext\declarative\base.py", line 131, in _as_declarative _MapperConfig.setup_mapping(cls, classname, dict_) File "C:\Users\name\Anaconda3\lib\site-packages\sqlalchemy\ext\declarative\base.py", line 160, in setup_mapping cfg_cls(cls_, classname, dict_) File "C:\Users\name\Anaconda3\lib\site-packages\sqlalchemy\ext\declarative\base.py", line 190, in __init__ self._setup_table() File "C:\Users\name\Anaconda3\lib\site-packages\sqlalchemy\ext\declarative\base.py", line 538, in _setup_table **table_kw File "C:\Users\name\Anaconda3\lib\site-packages\flask_sqlalchemy\model.py", line 99, in __table_cls__ return sa.Table(*args, **kwargs) File "<string>", line 2, in __new__ File "C:\Users\name\Anaconda3\lib\site-packages\sqlalchemy\util\deprecations.py", line 128, in warned return fn(*args, **kwargs) File "C:\Users\name\Anaconda3\lib\site-packages\sqlalchemy\sql\schema.py", line 506, in __new__ metadata._remove_table(name, schema) File "C:\Users\name\Anaconda3\lib\site-packages\sqlalchemy\util\langhelpers.py", line 68, in __exit__ compat.reraise(exc_type, exc_value, exc_tb) File "C:\Users\name\Anaconda3\lib\site-packages\sqlalchemy\util\compat.py", line 153, in reraise raise value File "C:\Users\name\Anaconda3\lib\site-packages\sqlalchemy\sql\schema.py", line 501, in __new__ table._init(name, metadata, *args, **kw) File "C:\Users\name\Anaconda3\lib\site-packages\sqlalchemy\sql\schema.py", line 600, in _init self._init_items(*args) File "C:\Users\name\Anaconda3\lib\site-packages\sqlalchemy\sql\schema.py", line 117, in _init_items spwd(self) File "C:\Users\name\Anaconda3\lib\site-packages\sqlalchemy\sql\base.py", line 457, in _set_parent_with_dispatch self.dispatch.after_parent_attach(self, parent) File "C:\Users\name\Anaconda3\lib\site-packages\sqlalchemy\event\attr.py", line 322, in __call__ fn(*args, **kw) File "C:\Users\name\Anaconda3\lib\site-packages\sqlalchemy\sql\schema.py", line 2094, in _set_table **self._unvalidated_dialect_kw File "C:\Users\name\Anaconda3\lib\site-packages\sqlalchemy\sql\schema.py", line 3132, in __init__ **dialect_kw File "C:\Users\name\Anaconda3\lib\site-packages\sqlalchemy\sql\schema.py", line 2711, in __init__ self._validate_dialect_kwargs(dialect_kw) File "C:\Users\name\Anaconda3\lib\site-packages\sqlalchemy\sql\base.py", line 289, in _validate_dialect_kwargs "named <dialectname>_<argument>, got '%s'" % k TypeError: Additional arguments should be named <dialectname>_<argument>, got 'nullable'flaskblog.py from flask import Flask, escape, request, render_template, url_for, flash, redirect from flask_sqlalchemy import SQLAlchemy from forms import RegistrationForm, LoginForm from datetime import datetime app = Flask(__name__) app.config["SECRET_KEY"] = "16ee14ac45b13e16aca29d7827e58366" app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///site.db" db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(20), unique = True, nullable=False) email = db.Column(db.String(120), unique = True, nullable=False) image_file = db.Column(db.String(20), nullable=False, default="default.jpg") password = db.Column(db.String(60), nullable=False) posts = db.relationship("Post", backref="auther", lazy=True) def __repr__(self): return f"User('{self.username}', '{self.email}', {self.image_file})" class Post(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(100), nullable=False) date_posted = db.Column(db.DateTime, nullable=False, default = datetime.utcnow) content = db.Column(db.Text, nullable=False) user_id = db.Column(db.Integer, db.ForeignKey("user.id", nullable=False)) def __repr__(self): return f"Post('{self.title}', '{self.date_posted}')" posts = [ { "auther": "ed", "title": "blog 1", "content": "first post", "sate_posted": "1/1/79" }, { "auther": " not ed", "title": "blog 2", "content": "second post", "sate_posted": "2/1/79" }] @app.route('/') @app.route('/home') def home(): return render_template("home.html", posts=posts) @app.route('/about') def about(): return render_template("about.html", title = "about") @app.route('/register', methods=["GET", "POST"]) def register(): form = RegistrationForm() if form.validate_on_submit(): flash(f"Account created for {form.username.data}!", "success") return redirect(url_for("home")) return render_template("register.html", title = "Register", form = form) @app.route('/login', methods=["GET", "POST"]) def login(): form = LoginForm() if form.validate_on_submit(): if form.email.data == "admin@blog.com" and form.password.data == "password": flash("You have been logged in!", "success") return redirect(url_for("home")) else: flash("Login Unsuccesful. please check username and password", "danger") return render_template("login.html", title = "Login", form = form) if __name__ == '__main__': app.run(debug=True)Ahora, no sé qué más necesitas, otros archivos que están asociados con esto se llaman:
forms.py about.html home.html layout.html login.html register.html main.cssNo los he agregado porque podría terminar siendo demasiado código innecesario, pero si necesita algo, simplemente deje un comentario.
Parece que cometiste un error tipográfico en el campo user_id de la clase Post .
Tu escribiste:
user_id = db.Column(db.Integer, db.ForeignKey("user.id", nullable=False))cuando lo correcto seria:
user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False)Hay un error con respecto a su sintaxis o convención de nomenclatura.
En mi caso, me faltaban s en las listas de nombres de clase (Padre) al hacer referencia a la clave externa en la clase secundaria.
en mi caso hubo un error tipográfico en nullable=False
Escribí nunllable=Falso
resuelto después de corregir el error tipográfico nullable=False