V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
ubuntugx
V2EX  ›  Python

怎样用 Python 搭建的 Web 服务器来接收浏览器发来的 AJAX 请求并返回数据

  •  
  •   ubuntugx ·
    ubuntugx · 2016-04-03 15:44:55 +08:00 · 7421 次点击
    这是一个创建于 3139 天前的主题,其中的信息可能已经有所发展或是发生改变。
    前台用 jQuery ajax 传了 url 。现在需要处理传来的图片并返回处理完的图片。
    我用了 flask 框架,查到是用 request 方法,但始终找不到好的例子。
    求提供方法或文章地址。
    15 条回复    2016-04-03 18:53:34 +08:00
    loading
        1
    loading  
       2016-04-03 15:55:11 +08:00 via Android
    这个说到底不关 python 的事,建议去补习一下 ajax 是什么。
    mringg
        2
    mringg  
       2016-04-03 15:57:54 +08:00 via Android
    图片=文件
    ubuntugx
        3
    ubuntugx  
    OP
       2016-04-03 16:04:38 +08:00
    @loading
    @mringg 也许我没有理解清楚,是 前端已经传了 url ,现在不知道怎么用 python 在后端获取。
    maltoze
        4
    maltoze  
       2016-04-03 16:15:44 +08:00   ❤️ 1
    file = request.files['file']

    差不多是这样吧
    mornlight
        5
    mornlight  
       2016-04-03 16:17:58 +08:00   ❤️ 1
    你的问题可能是:怎么用 Flask 框架搭建一个 API Server 处理前端请求

    看文档啊,懒得费力气就看国内各种在线视频网站的 Flask 教程啊,跟着学上手做几个小时就会基本的了,初期你都不需要考虑架构上的问题,看你博客那么多文章也不像没基础的样子。
    loading
        6
    loading  
       2016-04-03 16:26:18 +08:00 via Android   ❤️ 1
    我给你一段!如果你还是不会,你真的高估了自己,多看文档吧!

    @app.route('/download/<path:path>',methods=['GET'])
    def download(path):
    空格 print path
    空格 return send_from_directory('D:\\download\',path)
    fy
        7
    fy  
       2016-04-03 16:28:48 +08:00   ❤️ 1
    楼主这表达能力捉鸡啊,我理解大概是这意思:
    前端提交了一个 URL ,可能是个图片地址,然后后端要去下载并处理这个文件。

    这是一个典型的异步任务场景,至于办法就多了去了,随手搜一搜就行
    loading
        8
    loading  
       2016-04-03 16:29:01 +08:00 via Android   ❤️ 1
    from flask import send_from_directory


    或者用

    return redirect(“/download/”+filename)
    这样配合 nginx 是一般用途了。
    ubuntugx
        10
    ubuntugx  
    OP
       2016-04-03 16:35:34 +08:00
    @loading 谢谢您,我去仔细看看。
    @mornlight 谢谢,主要刚刚接触 python 几天,只学了基本语法,到这里就不知道从哪找了。
    @fy 嗯是的,谢谢。
    loading
        11
    loading  
       2016-04-03 16:36:25 +08:00 via Android
    建议去看完 flask 那个微博的例子。
    不过我感觉你是不懂前端吧。
    Biwood
        12
    Biwood  
       2016-04-03 16:37:11 +08:00
    你学东西的跨度还真有点大...首先你得知道怎么用 Flask 搭建一个普通的网站,然后再谈 AJAX 的事
    ubuntugx
        13
    ubuntugx  
    OP
       2016-04-03 16:41:09 +08:00
    @Biwood 是…要学的还真是多呢…
    clino
        14
    clino  
       2016-04-03 16:44:30 +08:00   ❤️ 2
    哦,刚看了楼主是处理文件的情况,这部分可能 uliweb 和 flask 差别会大一些
    前端用 jqupload 上传文件: https://github.com/zhangchunlin/shapps/blob/master/shapps/linci/artifact/templates/Artifact/inc_view.html#L123
    后端处理上传过来的文件: https://github.com/zhangchunlin/shapps/blob/master/shapps/linci/artifact/views.py#L102
    后端处理文件下载请求,如果出错就返回 json 但 http status code 为错误值,如果文件正常就返回文件: https://github.com/zhangchunlin/shapps/blob/master/shapps/linci/artifact/views.py#L181
    IMRES
        15
    IMRES  
       2016-04-03 18:53:34 +08:00   ❤️ 1
    ```python
    @app.route('/hello', methods=['POST', 'GET'])
    def hello():
    if request.method == 'POST':
    url = request.form.get('url')
    elif request.method == 'GET':
    url = request.args.get('url')
    return 'hello'
    ```

    只写一个接口看官方文档就可以了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2703 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:33 · PVG 23:33 · LAX 07:33 · JFK 10:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.