• flask-restful


    • GET :请求从服务器获取特定资源。举个例子:GET /classs(获取所有班级)
    • POST :在服务器上创建一个新的资源。举个例子:POST /classs(创建班级)
    • PUT :更新服务器上的资源(客户端提供更新后的整个资源)。举个例子:PUT /classs/12(更新编号为 12 的班级)
    • DELETE :从服务器删除特定的资源。举个例子:DELETE /classs/12(删除编号为 12 的班级)
    • PATCH :更新服务器上的资源(客户端提供更改的属性,可以看做作是部分更新),使用的比较少,这里就不举例子了

    讲restful的:https://mp.weixin.qq.com/s/10oSdNPwBDi_yXExt0uDMg

    版本:https://developer.github.com/v3/, 有的将版本放在head里
    参数规范:下划线命名
    url规范:url中不能有动词,只能有名词,且是名词复数
    对于参数特别多的,路由可以写成:[Route(“api/orders/{address}/{month}”)],
    如:https://example.com/api/orders/beijing/6?order_amount_greater=500&sort=order_amount_desc
    返回格式:json 或 xml

    ==================

    https://www.cnblogs.com/sss4/p/8097653.html

    https://www.cnblogs.com/Sunzz/category/1474541.html

    https://www.cnblogs.com/kaituorensheng/p/4645080.html

    https://www.cnblogs.com/pyspark/p/8677750.html

     restful api 最佳实践 http://www.ruanyifeng.com/blog/2018/10/restful-api-best-practices.html

    =====================

    RESTful API就是基于HTTP协议对互联网的内容定义的方式提出的一套互联网应用的架构体系,其中信息以JSON的形式进行存储,对对象的资源、操作、状态
    进行定义,RESTful是一种设计模式规范的指南,不是强制性的要求,所以要靠开发者自己遵守

    URL基本要求

    1.协议:HTTP或HTTPS
    2.域名和地址一般格式:http://<域名>/api/<version>
    3.域名和地址之后接资源名字统一用复数

    DELETE www.baidu.com/api/v1/articles?author=1&category=2      # 标准的restful api 示例
    # 动词 DELETE,表示要进行的操作是删除,即状态转移
    # 宾语 articles,表示文章这种资源URI,推荐用复数,即表现层
    # 定语 author=1&category=2,表示具体是什么资源
    # 版本 api/v1,这个能够帮助我们更好的进行版本的升级,同时不影响原有的请求

     restful api的特点:

    无状态
    请求URL = 动作(GET/POST/PUT/DELETE)+ 资源
    响应使用精确的状态码和JSON格式数据

    写RESTful API步骤

    1.想清楚我们的应用里可以抽象出什么样的资源,和他们的层次结构
    2.想清楚对对象的基本操作:GET,POST,PUT,DELETE的含义是什么
    3.组织接口代码。Spring如何去定义这些路由(URL):URL->Java类方法
    4.开始实现



    作者:迷路的丸子
    链接:https://www.jianshu.com/p/846bb2c9098e
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    ======================

    RESTful API返回的不是HTML,而是机器能直接解析的数据
    随着ajax的流行,API返回数据,而不是HTML页面,数据交互量减少,用户体验会好。
    前后台分离,后台更多的进行数据处理,前台对数据进行渲染。

    如果在普通的网站中,这个插件就显得有些鸡肋了,因为在普通的网页开发中,是需要去渲染HTML代码的,而Flask-Restful在每个请求中都是返回json格式的数据。

    @app.route('/post/<path:path>')

    # 接收URL链接类型参数
    app=Flask(__name__)
    @app.route('/<path:url>/')  #设置url传参数:http://127.0.0.1:5000/http://www.baiu.com/
    def first_flask(url):  #视图必须有对应接收参数
        print(url)
        return 'Hello World'  #response
    
    if __name__ == '__main__':
        app.run()
    
    接收URL链接类型参数

    注意如果要给视图函数加装饰器增加新功能,一点要加在路由装饰器下面

    设置cookie和响应头

    response = make_response(render_template('index.html'))
    
    response是flask.wrappers.Response类型
    
    response.delete_cookie('key')
    
    response.set_cookie('key', 'value')
    
    response.headers['X-Something'] = 'A value'
    
    return respons

    Flask使用的是Jinja2模板,所以其语法和Django无差别(Django的模板语言参考Jinja2)

    1.@app.before_first_request :请求第1次到来执行1次,之后都不执行;

    2.@app.before_request:请求到达视图之前执行;(改函数不能有返回值,否则直接在当前返回)

    3.@app.after_request:请求 经过视图之后执行;(最下面的先执行)

    request.method: 获取请求方法
    
    request.json
    
    request.json.get("json_key"):获取json数据 **较常用      
    
    request.argsget('name') :获取get请求参数   
    
    request.form.get('name') :获取POST请求参数
    
    request.form.getlist('name_list'):获取POST请求参数列表(多个)
    
    request.values.get('age') :获取GET和POST请求携带的所有参数(GET/POST通用)
    
    request.cookies.get('name'):获取cookies信息
    
    request.headers.get('Host'):获取请求头相关信息
    
    request.path:获取用户访问的url地址,例如(/,/login/,/ index/);
    
    request.full_path:获取用户访问的完整url地址+参数 例如(/login/?age=18)
    
    request.script_root: 抱歉,暂未理解其含义;
    
    request.url:获取访问url地址,例如http://127.0.0.1:5000/?age=18;
    
    request.base_url:获取访问url地址,例如 http://127.0.0.1:5000/;
    
    request.url_root
    
    request.host_url
    
    request.host:获取主机地址
    
    request.files:获取用户上传的文件
     # 获取一个参数的一个值
        http://127.0.0.1:5000/request?username=abcd
        username = request.args.get("username")
        # print(username)
        """打印效果: abcd  """
    
        # 获取一个参数的多个值
        # http://127.0.0.1:5000/request?username=xiaoming&love=吹牛&love=睡觉
        love = request.args.getlist("love")
        # print(love)
        """打印效果: ['吹牛', '睡觉']"""
    
    
        # 把传递过来的数据抓换成原生的字典
        data = request.args.to_dict()
        # print(data)
        """打印效果:{'username': 'xiaoming', 'love': '吹牛'} """
    在 Flask 中可以直接使用 jsonify 生成一个 JSON 的响应
    from flask import Flask, request, jsonify
    
    @app.route("/")
    def index():
        # 也可以响应json格式代码
        data = [
            {"id":1,"username":"liulaoshi","age":18},
            {"id":2,"username":"liulaoshi","age":17},
            {"id":3,"username":"liulaoshi","age":16},
            {"id":4,"username":"liulaoshi","age":15},
        ]
        return jsonify(data)
    Cookie基于域名安全,不同域名的Cookie是不能互相访问的
    
    如访问luffy.com时向浏览器中写了Cookie信息,使用同一浏览器访问baidu.com时,无法访问到luffy.com写的Cookie信息
    
    浏览器的同源策略针对cookie也有限制作用.
    
    当浏览器请求某网站时,会将本网站下所有Cookie信息提交给服务器,所以在request中可以读取Cookie信息
    注意: Session依赖于Cookie,而且flask中使用session,需要配置SECRET_KEY选项,否则报错.
    设置session
    from flask import session
    @app.route('/set_session')
    def set_session():
        session['username'] = 'xiaoming'
        return 'ok!'
    获取session
    @app.route('/get_session')
    def get_session():
        return session.get('username')
    before_first_request
    在处理第一个请求前执行
    before_request
    在每次请求前执行
    如果在某修饰的函数中返回了一个响应,视图函数将不再被调用.一般可以用来判断权限,或者转换路由参数或者预处理客户端的请求的数据
    after_request
    如果没有抛出错误,在每次请求后执行.一般可以用于记录会员/管理员的操作历史,浏览历史,清理收尾的工作
    接受一个参数:视图函数作出的响应
    在此函数中可以对响应值在返回之前做最后一步修改处理
    需要将参数中的响应在此参数中进行返回
    teardown_request:
    在每次请求后执行
    接受一个参数:错误信息,如果有相关错误抛出
    需要设置flask的配置DEBUG=False,teardown_request才会接受到异常对象。
    捕获指定异常类型
    @app.errorhandler(ZeroDivisionError)
    def zero_division_error(e):
        return '除数不能为0'
    application 指的就是当你调用app = Flask(__name__)创建的这个对象app;
    request 指的是每次http请求发生时,WSGI server(比如gunicorn)调用Flask.__call__()之后,在Flask对象内部创建的Request对象;
    请求上下文对象有:request、session
    应用上下文对象有:current_app,g
    注意:不同的请求,会有不同的全局变量
    • 请求上下文:保存了客户端和服务器交互的数据
    • 应用上下文:flask 应用程序运行过程中,保存的一些配置信息,比如程序名、数据库连接、应用信息等

     通常的做法就是把token值放在header里面。

  • 相关阅读:
    MarkDown学习
    做网站的或者博客的网站
    Calendar日历简单用法
    Cron表达式范例
    CSVFileUtil 读取写入CSV文件简单工具类
    直接读取ZIP包数据 线上、线下方法
    Spring @Async/@Transactional 失效的原因及解决方案
    多线程学习 读写锁
    多线程学习 公平锁和非公平锁
    多线程学习 ThreadLocal的使用。
  • 原文地址:https://www.cnblogs.com/testzcy/p/11613698.html
Copyright © 2020-2023  润新知