zoukankan      html  css  js  c++  java
  • 使用bottle进行web开发(9):文件上传;json传递

    1.文件上传

       如果要完成文件上传,则需要对上文的form做一点改动,具体如下:

    <form action="/upload" method="post" enctype="multipart/form-data">
    Category: <input type="text" name="category" />
    Select a file: <input type="file" name="upload" />
    <input type="submit" value="Start upload" />
    </form>

    bottle把file的upload 是放在BaseRequest.files里的(以FileUpload进程的方式存在),这里,我们的例子,都是假设存在硬盘里的

    @route('/upload', method='POST')
    def do_upload():
    category = request.forms.get('category')
    upload = request.files.get('upload')
    name, ext = os.path.splitext(upload.filename)
    if ext not in ('.png','.jpg','.jpeg'):
    return 'File extension not allowed.'
    save_path = get_save_path_for_category(category)
    upload.save(save_path) # appends upload.filename automatically
    return 'OK'

    2)有些js或者REST的客户端,发送application/json 给服务器,通过这个方式来传递信息。这个时候,BaseRequest.json属性就保存这些信息。

    The raw request body
    You can access the raw body data as a file-like object via BaseRequest.body. This is a BytesIO buffer or a
    temporary file depending on the content length and BaseRequest.MEMFILE_MAX setting. In both cases the body
    is completely buffered before you can access the attribute. If you expect huge amounts of data and want to get direct
    unbuffered access to the stream, have a look at request[’wsgi.input’].

    3)WSGI环境

    每个的BaseRequest都保存着一个WSGI的环境字典。

    举例如下;

    @app.route('/my_ip')
    def get_remote_ip():
        ip=request.environ.get('REMOTE_ADDR')
        return template('Your IP is:{{IP}}',IP=ip)

    4)template

     bottle自带一个模板,称之为:SimpleTemplate Engine

     使用这个模板,可以通过template()函数或者view()装饰器。

    只需要把模板名称和要替换的参数信息传递进去即可。

    比如:

    @route('/hello')
    @route('/hello/<name>')
    def hello(name='World'):
    return template('hello_template', name=name)

    bottle去哪里找这些模板呢:去./VIEWS/目录下或者Bottle.template_path环境变量。

    Templates are cached in memory after compilation. Modifications made to the template files will have no affect until
    you clear the template cache. Call bottle.TEMPLATES.clear() to do so. Caching is disabled in debug mode.

  • 相关阅读:
    Linux的命令技巧
    MAC地址表、ARP缓存表以及路由表
    边缘触发(Edge Trigger)和条件触发(Level Trigger)
    vue-router跳转页面
    正则表达式(简单易懂篇)
    Markdown快速使用指南
    WEB前端资源集(二)
    WEB前端资源集(一)
    js判断移动端与pc端
    js原声快速实现选项卡
  • 原文地址:https://www.cnblogs.com/aomi/p/7054242.html
Copyright © 2011-2022 走看看