Maison  >  Questions et réponses  >  le corps du texte

python - Une erreur de rôle utilisateur du chapitre 8 du code source de copie de Flask se produit

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))
世界只因有你世界只因有你2690 Il y a quelques jours723

répondre à tous(1)je répondrai

  • 阿神

    阿神2017-05-18 10:49:39

    L'erreur est très claire
    (pymysql.err.ProgrammingError) (1146, "La table 'flask.users' n'existe pas")

    répondre
    0
  • Annulerrépondre