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

老师,在29-34行中,使用接口Animal类来获取Mouse,Bird的run,fly获取不了,视频里老师也没有进行这2个参数的演示。

from flask import Flask
from flask_graphql import GraphQLView
import graphene

class Animal(graphene.Interface):  #定义一个接口类
    id=graphene.ID()
    name=graphene.String()

class Mouse(graphene.ObjectType):
    class Meta:
        interfaces=(Animal,)    #继承接口中的属性
    run = graphene.String()     #自定义属性

class Bird(graphene.ObjectType):
    class Meta:
        interfaces = (Animal,)  #继承接口中的属性
    fly = graphene.String()     #自定义属性

class Query(graphene.ObjectType):
    mouse=graphene.Field(Mouse) #获得Mouse属性
    bird=graphene.Field(Bird)   #获得Bird属性
    animal=graphene.Field(Animal,type_=graphene.Int(required = True))

    def resolve_mouse(self,info):
        return Mouse(id=1,name='杰瑞',run='汤姆快跑呀~~')
    def resolve_bird(self,info):
        return Bird(id=2,name='高书博',fly='汤姆快跑呀~~')
    # def resolve_animal(self,info,type_):
    #     if type_==1:
    #         return Mouse(id=3, name='狗蛋高书博', run='追唐老鸭啦~~~')
    #     elif type_==2:
    #         return Bird(id=4, name='狗子高书博', fly='跑呀~Tom来了!!')

    def resolve_animal(self,info,type_):
        # return Animal(id=3,name='动物') #  "message": "An Interface cannot be intitialized",
        if type_ == 1:
            return Mouse(id= 4, name='米老鼠',run='追唐老鸭啦~~~')
        else:
            return Bird(id = 3,name='鹦鹉',fly = '跑呀~Tom来了!!')

if __name__=='__main__':
    schema=graphene.Schema(query=Query)  #查询Query
    app=Flask(__name__) #创建flask对象
    # /graphql:视图的URL, GraphQLView.as_view:将映射函数转换成视图函数 ,'grapql':视图名称  ,
    # 把schema注册到schema方法里, graphiql=True:开启插件应用
    app.add_url_rule('/graphql', view_func=GraphQLView.as_view('grapql', schema=schema, graphiql=True))
    app.run()

image.png

Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/GraphQL 437楼
Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask数据库 438楼

from flask import Flask,request,render_template

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World!'

@app.route('/article/<id>/')
def list(id):
    print(id)
    return 'success your id is %s'%id

@app.route('/article2/<uuid:id>/')
def list2(id):
    print(id)
    return 'success your id is %s'%id
# import uuid
# print(uuid.uuid4())
#@app.route('/list7')#这种写法方式只支持get请求方式   不支持post请求方式
@app.route('/list7',methods=['GET','POST'])#这种写法方式支持get请求方式 支持post请求方式
def list7():
    if request.method=='GET':
        pwd = request.args.get('pwd')
        uname = request.args.get('uname')
        # return 'success: %s ,%s'%(uname,pwd)
        return render_template('login.html')
    elif request.method=="POST":
        uname=request.form.get('uname')
        pwd=request.form.get('pwd')
        return 'post请求成功: %s ,%s'%(uname,pwd)
if __name__ == '__main__':
    app.run(debug=True)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h4>登陆页面</h4>
    <form action="/list7" method="post"></form>
    用户名:<input type="text" name="uname"><br>
    密&nbsp;码:<input type="password" name="pwd"><br>
    <input type="submit" value="登录">
</body>
</html>

image.png

为什么点击登录没有反应

Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask视图基础和URL 442楼
Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask数据库 444楼
Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask视图基础和URL 445楼
Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/虚拟环境 446楼
Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/虚拟环境 447楼

老师,你好。

关于删除数据这一块,上一节视频删除数据的话如果外键里设置了nullable=Flase,外键就设不了为空,主键自然也就删除不了,没有给nullable=Flese的话外键值会设置为NUll,然后会把主键的数据也给干掉的啊。

在本章视频中老师并没有在外键里设置这个nullable类型,而是直接用delete就可以删除数据,删除的数据只是把指定的数据给删除,并没有把关联表的主键数据给删除,这是为什么呢,我已经懵圈了。

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

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

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)

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

#增加数据
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()

#删除数据
def oper_data():
    article = session.query(Article).first()  #查找Article中的第一条数据
    session.delete(article)                   #删除
    session.commit()                          #提交

if __name__ == '__main__':
    # add_data()
    oper_data()

image.pngimage.png

Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask数据库 449楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

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