zoukankan      html  css  js  c++  java
  • DAY4-Flask项目

    项目出现的问题:

     

    问题处在import requests。requests库已经安装了啊;

     找了半天也不知道具体错误在哪里,根据提示想是不是http.py这个模块与Python内置的同名模块冲突了?所以把http改了个名字发现没有报错了可以正常启动了

    好奇怪。。。。

    1.蓝图:插入到核心对象app

    添加__init__.py  使文件夹成为一个包

    蓝图相关的初始化放在web文件夹中

    之前的fisher.py代码:

    from flask import Flask
    
    app = Flask(__name__)
    app .config.from_object('config')
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', debug=app.config['DEBUG'])

    app = Flask(__name__) app .config.from_object('config')

    放进app文件下的__init__.py中来初始化核心的对象:

    from flask import Flask
    
    def create_app():
        app = Flask(__name__)
        app.config.from_object('config')  # 导入载入配置文件 参数为模块路径
        return app

    在Fisher.py 中就可以使用create_app初始化核心对象

     使用;蓝图:

    1.实例化蓝图对象:在book.py中(也就是实现视图函数注册的地方)中实例化蓝图对象用于注册视图函数

    web = Blueprint('web', __name__)

    ‘web’:蓝图的名称

    __name__:指定蓝图所在的包或者模块,__name__ 就是所在的包中

    2.使用web蓝图注册视图函数:

    @web.route('/book/search/<q>/<page>')

    在上述操作后还是不能访问视图函数

    我们不能把蓝图当做核心对象使用,蓝图还是要在核心对象中注册。老大还是 app!

    3.把蓝图对象插入到 app上:

    有关app 的操作都放在了 app 文件夹 中的__init__.py 中:

    from flask import Flask
    
    def create_app():
        app = Flask(__name__)
        app.config.from_object('config')  # 导入载入配置文件 参数为模块路径
        register_blueprint(app)
        return app
    
    def register_blueprint(app): #注册蓝图
        from app.web.book import web
        app.register_blueprint(web)  #把蓝图注册到Flask核心对象app

    就可以访问api了!(其实有点问题)

    访问:http://127.0.0.1:81/book/search/9787111552062 无法访问

    http://127.0.0.1:81/book/search/9787111552062/1 才可以!!!

    2.同一个蓝图下面把视图函数拆分到不同的文件里面去

    web下有很多的视图函数,不可能内个函数都有一个蓝图注册,web下只需要一个蓝图就可以注册多个函数:

    web = Blueprint('web', __name__)

    剪切到__init__.py文件中

    在book.py中导入web:from .import web

    但是任然不能访问视图函数,原因是:book.py分开的视图函数是没有被导入执行的

    解决方法:在__init__.py中导入book.py执行

    from flask import Blueprint
    
    web = Blueprint('web', __name__) #注册蓝图,web蓝图名称,__name__指定蓝图的所在的模块
    
    from app.web import book

    3.视图函数传参的方式优化:

    使用?的方式传参:

    会报错,在 def search(q, page)这种方式就不能用了

     Flask提供Request对象。它的实例化可以接收到 ? 后的参数

     Request几乎包含了全部的http请求的信息:

     request 对象不能自己实例化,而是Flask框架创建管理的,使用他的时候导入就可以了:

    获取q 和 page:

    4.验证参数(WTForms):

    验证层:验证参数单独在一个文件夹中,form-book.py:

    from wtforms import Form, StringField, IntegerField
    from wtforms.validators import Length, NumberRange
    
    class SearchForm(Form):
        q = StringField(validators=[Length(min=1, max=30)])#文本类型的变量,StringField对象创建
        page = IntegerField(validators=[NumberRange(min=1, max=99)], default=1) #default默认

     在视图函数中使用:

    @web.route('/book/search/')
    def search():
        # q = request.args['q']
        # page = request.args['page']
        form = SearchForm(request.args) #实例化,传入的参数是q和page 直接request.args
        if form.validate(): #判断是否通过验证
            q = form.q.data #取值q
            page = form.page.data
            isbn_or_key = is_isbn_or_key(q)
            if isbn_or_key == 'isbn':
                result = YuShuBook.search_by_isbn(q)
            else:
                result = YuShuBook.search_by_keyword(q)
            return jsonify(result)
        else:
            return jsonify({'msg':'参数校验失败'})
  • 相关阅读:
    JS---数组(Array)处理函数整理
    xStream完美转换XML、JSON
    DD_belatedPNG解决IE6下PNG不透明问题
    转 DataTorrent 1.0每秒处理超过10亿个实时事件
    转 Apache Kafka:下一代分布式消息系统
    Selenium(ThoughtWorks公司开发的web自动化测试工具)
    oracle 拆分字符串并转换为表
    C# winform 使用DsoFramer 创建 显示office 文档
    visual studio 2014 新特性
    转 管线开发
  • 原文地址:https://www.cnblogs.com/xussi/p/9146560.html
Copyright © 2011-2022 走看看