会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132359个问题
Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask高级 601楼

from flask import Flask,render_template,request,session


from random import randint


from formscheck2 import LoginForm


app = Flask(__name__)


app.secret_key = 'sdfsdfsdf'


@app.route('/')

def index():

    return 'hello'







from wtforms import Form,StringField

#  验证验证码长度]

from wtforms.validators import Length,ValidationError # 这个是返回异常


from flask import session


class LoginForm(Form):

    code = StringField(validators=[Length(4,4)])  # 但是这只是简单的验证并不能满足数据内容匹配


    def validate_code(self,field):

        #   前端的代码等于后端的属性

        font_code = field.data

        #   服务器session的验证]

        server_code = str(session.get('code'))



        print(f'前端的数据是{font_code},服务器的数据是{server_code}')

        print(f'前端的数据是{type(font_code)},服务器的数据是{type(server_code)}')

        if font_code != server_code:

            raise ValidationError('验证码错误!') #  括号里抛出错误的 信息








@app.route('/login/',methods=['GET','POST'])

def register():

    if request.method == 'GET':

        code = randint(1000,9999)

        #  用于接收生成的验证码方便后面进行验证

        session['code'] = code

        return render_template('login.html',code=code)  #form = RegisterForm(request.form)

       

    else:

        # form = LoginForm(request.form)

        form = LoginForm().validate_code(request.form)


        if form.validate:

            return '验证成功'

        else:

            return f'验证失败!!{form.errors}'  # 验证失败的原因

       


if __name__ == '__main__':

    app.run(debug=True)



老师就是这个自定义的类似乎没有被引用,我把另外一个包也拿过来了

Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask高级 607楼
Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask之Jinja2模版 608楼
Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask视图基础和URL 609楼
Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask数据库 610楼

  1. 老师对于下面这段代码,有一处我还能弄明白'

其中的author = relationship("User",backref=backref("comments")),怎么有时候又写成author = relationship("User",backref="comments"),“backref=”后面加backref的作用是?什么时候加呢?



from sqlalchemy import create_engine,Column,Integer,Float,Boolean,DECIMAL,Enum,\
    Date,DateTime,Time,String,Text,func,or_,and_,ForeignKey,Table
from sqlalchemy.dialects.mysql import LONGTEXT
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker,relationship,backref
import random

HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'first_sqlalchemy'
USERNAME = 'root'
PASSWORD = 'root'

DB_URI ="mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8".format(username=USERNAME,password=PASSWORD,host=HOSTNAME,port=PORT,db=DATABASE)

engine = create_engine(DB_URI)
Base = declarative_base(engine)

session = sessionmaker(engine)()

class User(Base):
    __tablename__ = 'user'
    id = Column(Integer,primary_key=True,autoincrement=True)
    uname = Column(String(50),nullable=False)

    # articles =relationship("Article",cascade="save-update,delete") #放入Article中去优化

class Article(Base):
    __tablename__ = 'article'
    id = Column(Integer, primary_key=True, autoincrement=True)
    title = Column(String(50), nullable=False)
    uid = Column(Integer,ForeignKey("user.id"))

    # author = relationship("User",backref="articles") #cascade默认为save-update
    # author = relationship("User",backref="articles",cascade="")
    # author = relationship("User",backref="articles",cascade="save-update") #明文指定 cascade的值
    # author = relationship("User",cascade="save-update,delete")
    author = relationship("User", backref = backref("articles",cascade="save-update,delete"),cascade="save-update,delete") #双向关系优化写法

class Comment(Base):
    __tablename__ = 'comment'
    id = Column(Integer, primary_key=True, autoincrement=True)
    content = Column(Text,nullable=False)
    uid = Column(Integer,ForeignKey("user.id"))

    # 优化写法
    author = relationship("User",backref=backref("comments"))

def add_data():
    Base.metadata.drop_all()
    Base.metadata.create_all()
    user = User(uname="momo")
    article = Article(title="华为5G")
    article.author = user
    session.add(article)
    session.commit()

    comment = Comment(content='你少说风凉话')
    comment.author = user
    session.add(comment)
    session.commit()

def oper_data():
    #relationship里边的cascade  可通过Article影响User
    # article = session.query(Article).first()
    # session.delete(article)
    # session.commit()

    # 反过来通过User也能影响Article
    user = session.query(User).first()
    session.delete(user)
    session.commit()

#总结1:relationship里边的cascade  可通过Article影响User,反过来通过User也能影响Article
#总结2:relationship里边的cascade 只会影响当前类User中relationship的模型Article,不会影响别的模型Comment
if __name__ == '__main__':
    # add_data()
    oper_data()

#ORM层面的relationship方法中cascade使用1




Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask数据库 612楼
Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask视图基础和URL 613楼
Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask高级 615楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637