J'ai terminé le chapitre 8 dans l'après-midi. Je peux me connecter à la page Web et stocker des données dans la base de données, mais je ne peux pas envoyer de messages électroniques. J'ai donc copié le
code source, et maintenant un nouveau problème est survenu
Le. La différence entre moi et le code source est la configuration de la base de données. , j'ai directement tapé l'adresse, et elle peut être utilisée dans l'après-midi.
C'était testé avant et ce n'était pas un problème. il n'y avait pas de clé étrangère associée à l'utilisateur et au rôle. Le livre mentionnait la migration de la base de données, donc je l'ai essayé aussi, mais je ne suis pas sûr qu'il puisse y avoir un problème avec la base de données. moi. Merci d'avance
Erreur
sqlalchemy.exc.ProgrammingError
sqlalchemy.exc.ProgrammingError : (pymysql.err.ProgrammingError) (1146, "La table 'flask.users' n'existe pas") [SQL : 'SELECT users.id AS users_id, users .email AS utilisateurs_email, utilisateurs.nom d'utilisateur AS utilisateurs_nom d'utilisateur, utilisateurs.role_id AS utilisateurs_role_id, utilisateurs.password_hash AS utilisateurs_password_hash, utilisateurs.confirmé AS utilisateurs_confirmé nFROM utilisateurs nWHERE utilisateurs.id = %(param_1)s'] [paramètres : {'param_1' : 1}]
#coding:utf-8
import os
basedir = os.path.abspath(os.path.dirname(__file__))
class Config:
SECRET_KEY = 'hard to guess string'
SSL_DISABLE = False
SQLALCHEMY_COMMIT_ON_TEARDOWN = True
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_RECORD_QUERIES = True
MAIL_SERVER = 'smtp.163.com'
MAIL_PORT = 25
MAIL_USE_TLS = True
MAIL_USERNAME = ('13166337919@163.com')
MAIL_PASSWORD = ('a123123')
FLASKY_MAIL_SUBJECT_PREFIX = '[Flasky]'
FLASKY_MAIL_SENDER = 'Flasky Admin <13166337919@163.com>'
FLASKY_ADMIN = ('626825701@qq.com')
@staticmethod
def init_app(app):
pass
class DevelopmentConfig(Config):
DEBUG = True
SQLALCHEMY_DATABASE_URI ='mysql+pymysql://root:123456@127.0.0.1/flask'
class TestingConfig(Config):
TESTING = True
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@127.0.0.1/text'
class ProductionConfig(Config):
SQLALCHEMY_DATABASE_URI ='mysql+pymysql://root:123456@127.0.0.1/pro'
config = {
'development': DevelopmentConfig,
'testing': TestingConfig,
'production': ProductionConfig,
'default': DevelopmentConfig
}
from werkzeug.security import generate_password_hash, check_password_hash
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
from flask import current_app
from flask_login import UserMixin
from . import db, login_manager
class Role(db.Model):
__tablename__ = 'roles'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), unique=True)
users = db.relationship('User', backref='role', lazy='dynamic')
def __repr__(self):
return '<Role %r>' % self.name
class User(UserMixin, db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(64), unique=True, index=True)
username = db.Column(db.String(64), unique=True, index=True)
role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
password_hash = db.Column(db.String(128))
confirmed = db.Column(db.Boolean, default=False)
@property
def password(self):
raise AttributeError('password is not a readable attribute')
@password.setter
def password(self, password):
self.password_hash = generate_password_hash(password)
def verify_password(self, password):
return check_password_hash(self.password_hash, password)
def generate_confirmation_token(self, expiration=3600):
s = Serializer(current_app.config['SECRET_KEY'], expiration)
return s.dumps({'confirm': self.id})
def confirm(self, token):
s = Serializer(current_app.config['SECRET_KEY'])
try:
data = s.loads(token)
except:
return False
if data.get('confirm') != self.id:
return False
self.confirmed = True
db.session.add(self)
return True
def __repr__(self):
return '<User %r>' % self.username
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
L'erreur est très claire
(pymysql.err.ProgrammingError) (1146, "La table 'flask.users' n'existe pas")