{"id":167,"date":"2026-06-17T19:20:16","date_gmt":"2026-06-17T11:20:16","guid":{"rendered":"https:\/\/www.52runoob.com\/?p=167"},"modified":"2026-06-17T19:20:16","modified_gmt":"2026-06-17T11:20:16","slug":"flask-%e8%af%b7%e6%b1%82%e4%b8%8e%e5%93%8d%e5%ba%94","status":"publish","type":"post","link":"https:\/\/www.52runoob.com\/index.php\/2026\/06\/17\/flask-%e8%af%b7%e6%b1%82%e4%b8%8e%e5%93%8d%e5%ba%94\/","title":{"rendered":"Flask \u8bf7\u6c42\u4e0e\u54cd\u5e94"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u5728 Flask \u4e2d\uff0c<strong>\u8bf7\u6c42\uff08Request\uff09<\/strong>\u548c<strong>\u54cd\u5e94\uff08Response\uff09<\/strong>\u662f Web \u5e94\u7528\u4e0e\u5ba2\u6237\u7aef\uff08\u6d4f\u89c8\u5668\u3001App \u6216\u5176\u4ed6\u670d\u52a1\uff09\u4ea4\u4e92\u7684\u6838\u5fc3\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Flask \u4f7f\u7528 <strong>Werkzeug<\/strong> \u5e93\u6765\u5904\u7406\u5e95\u5c42\u7684 HTTP \u534f\u8bae\u7ec6\u8282\uff0c\u63d0\u4f9b\u4e86\u975e\u5e38 Pythonic \u7684\u5bf9\u8c61\u6765\u5c01\u88c5\u8fd9\u4e9b\u4fe1\u606f\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">1. \u8bf7\u6c42\u5bf9\u8c61 (Request)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>request<\/code> \u662f\u4e00\u4e2a<strong>\u5168\u5c40\u4ee3\u7406\u5bf9\u8c61<\/strong>\u3002\u867d\u7136\u5b83\u5728\u4ee3\u7801\u4e2d\u770b\u8d77\u6765\u50cf\u5168\u5c40\u53d8\u91cf\uff0c\u4f46\u5728\u591a\u7ebf\u7a0b\u73af\u5883\u4e0b\uff0cFlask \u901a\u8fc7\u201c\u4e0a\u4e0b\u6587\u673a\u5236\u201d\u786e\u4fdd\u6bcf\u4e2a\u7ebf\u7a0b\/\u534f\u7a0b\u770b\u5230\u7684\u662f\u5c5e\u4e8e\u5f53\u524d\u8bf7\u6c42\u7684\u72ec\u7acb\u6570\u636e\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4f60\u9700\u8981\u4ece <code>flask<\/code> \u6a21\u5757\u5bfc\u5165\u5b83\uff1a<\/p>\n\n\n\n<div class=\"chp-code-block chp-theme-github-dark chp-wrap-on\" data-chp-language=\"plaintext\" data-chp-line-start=\"1\" data-chp-highlight=\"\"><div class=\"chp-toolbar\"><div class=\"chp-toolbar-left\"><span class=\"chp-dots\"><span><\/span><span><\/span><span><\/span><\/span><span class=\"chp-language-label\">\u7eaf\u6587\u672c<\/span><\/div><div class=\"chp-toolbar-right\"><button type=\"button\" class=\"chp-copy-btn\" aria-label=\"\u590d\u5236\u4ee3\u7801\"><svg class=\"chp-icon-copy\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\/><\/svg><svg class=\"chp-icon-check\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\" style=\"display:none;\"><path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\/><\/svg><span class=\"chp-copy-text\">\u590d\u5236<\/span><\/button><\/div><\/div><div class=\"chp-code-wrapper\"><div class=\"chp-line-numbers\" aria-hidden=\"true\"><span>1<\/span><\/div><pre class=\"chp-pre\" style=\"font-size:14px;\"><code class=\"language-plaintext\">from flask import request<\/code><\/pre><\/div><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83d\udce5 \u83b7\u53d6\u6570\u636e\u7684\u5e38\u7528\u65b9\u5f0f<\/h4>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">\u6570\u636e\u6765\u6e90<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u5c5e\u6027\/\u65b9\u6cd5<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u8bf4\u660e<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u793a\u4f8b URL\/Body<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>URL \u67e5\u8be2\u53c2\u6570<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>request.args<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u83b7\u53d6 <code>?key=value<\/code> \u5f62\u5f0f\u7684\u53c2\u6570<\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>?page=1&amp;sort=desc<\/code><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u8868\u5355\u6570\u636e<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>request.form<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u83b7\u53d6 POST \u63d0\u4ea4\u7684\u8868\u5355 (<code>application\/x-www-form-urlencoded<\/code>)<\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>&lt;form&gt;<\/code> \u63d0\u4ea4\u7684\u6570\u636e<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>JSON \u6570\u636e<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>request.get_json()<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u83b7\u53d6 JSON \u683c\u5f0f\u7684\u8bf7\u6c42\u4f53 (<code>application\/json<\/code>)<\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>{\"name\": \"John\"}<\/code><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u6587\u4ef6\u4e0a\u4f20<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>request.files<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u83b7\u53d6\u4e0a\u4f20\u7684\u6587\u4ef6\u5bf9\u8c61<\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>&lt;input type=\"file\"&gt;<\/code><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Cookies<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>request.cookies<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u83b7\u53d6\u5ba2\u6237\u7aef\u53d1\u9001\u7684 Cookie<\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>dict-like object<\/code><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Headers<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>request.headers<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u83b7\u53d6 HTTP \u8bf7\u6c42\u5934<\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>User-Agent<\/code>, <code>Authorization<\/code><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>Method<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>request.method<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">\u83b7\u53d6\u8bf7\u6c42\u65b9\u6cd5 (GET, POST \u7b49)<\/td><td class=\"has-text-align-left\" data-align=\"left\"><code>'GET'<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83d\udca1 \u4ee3\u7801\u793a\u4f8b<\/h4>\n\n\n\n<div class=\"chp-code-block chp-theme-github-dark chp-wrap-on\" data-chp-language=\"plaintext\" data-chp-line-start=\"1\" data-chp-highlight=\"\"><div class=\"chp-toolbar\"><div class=\"chp-toolbar-left\"><span class=\"chp-dots\"><span><\/span><span><\/span><span><\/span><\/span><span class=\"chp-language-label\">\u7eaf\u6587\u672c<\/span><\/div><div class=\"chp-toolbar-right\"><button type=\"button\" class=\"chp-copy-btn\" aria-label=\"\u590d\u5236\u4ee3\u7801\"><svg class=\"chp-icon-copy\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\/><\/svg><svg class=\"chp-icon-check\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\" style=\"display:none;\"><path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\/><\/svg><span class=\"chp-copy-text\">\u590d\u5236<\/span><\/button><\/div><\/div><div class=\"chp-code-wrapper\"><div class=\"chp-line-numbers\" aria-hidden=\"true\"><span>1<\/span><span>2<\/span><span>3<\/span><span>4<\/span><span>5<\/span><span>6<\/span><span>7<\/span><span>8<\/span><span>9<\/span><span>10<\/span><span>11<\/span><span>12<\/span><span>13<\/span><span>14<\/span><span>15<\/span><span>16<\/span><span>17<\/span><span>18<\/span><span>19<\/span><span>20<\/span><span>21<\/span><span>22<\/span><span>23<\/span><span>24<\/span><span>25<\/span><span>26<\/span><span>27<\/span><span>28<\/span><span>29<\/span><span>30<\/span><span>31<\/span><span>32<\/span><span>33<\/span><span>34<\/span><span>35<\/span><span>36<\/span><span>37<\/span><span>38<\/span><span>39<\/span><span>40<\/span><span>41<\/span><span>42<\/span><span>43<\/span><\/div><pre class=\"chp-pre\" style=\"font-size:14px;\"><code class=\"language-plaintext\">from flask import Flask, request, jsonify\n\napp = Flask(__name__)\n\n# 1. \u5904\u7406 GET \u8bf7\u6c42 (\u67e5\u8be2\u53c2\u6570)\n@app.route(&#039;\/search&#039;)\ndef search():\n    # get(&#039;key&#039;, default) \u5982\u679c key \u4e0d\u5b58\u5728\uff0c\u8fd4\u56de\u9ed8\u8ba4\u503c\uff0c\u907f\u514d\u62a5\u9519\n    keyword = request.args.get(&#039;keyword&#039;, &#039;&#039;)\n    page = request.args.get(&#039;page&#039;, 1, type=int) # \u81ea\u52a8\u8f6c\u6362\u4e3a int\n    return f&#039;Searching for: {keyword}, Page: {page}&#039;\n\n# 2. \u5904\u7406 POST \u8bf7\u6c42 (JSON \u6570\u636e - API \u5e38\u7528)\n@app.route(&#039;\/api\/user&#039;, methods=[&#039;POST&#039;])\ndef create_user():\n    data = request.get_json()\n\n    if not data or &#039;username&#039; not in data:\n        return jsonify({&quot;error&quot;: &quot;Missing username&quot;}), 400\n\n    username = data[&#039;username&#039;]\n    return jsonify({&quot;message&quot;: f&quot;User {username} created&quot;}), 201\n\n# 3. \u5904\u7406 POST \u8bf7\u6c42 (\u8868\u5355\u6570\u636e)\n@app.route(&#039;\/login&#039;, methods=[&#039;POST&#039;])\ndef login():\n    username = request.form.get(&#039;username&#039;)\n    password = request.form.get(&#039;password&#039;)\n    return f&#039;Login attempt for: {username}&#039;\n\n# 4. \u5904\u7406\u6587\u4ef6\u4e0a\u4f20\n@app.route(&#039;\/upload&#039;, methods=[&#039;POST&#039;])\ndef upload_file():\n    if &#039;file&#039; not in request.files:\n        return &#039;No file part&#039;, 400\n\n    file = request.files[&#039;file&#039;]\n    if file.filename == &#039;&#039;:\n        return &#039;No selected file&#039;, 400\n\n    # \u4fdd\u5b58\u6587\u4ef6\n    file.save(f&#039;\/safe\/path\/{file.filename}&#039;)\n    return &#039;File uploaded successfully&#039;<\/code><\/pre><\/div><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">2. \u54cd\u5e94\u5bf9\u8c61 (Response)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u89c6\u56fe\u51fd\u6570\u7684\u8fd4\u56de\u503c\u4f1a\u81ea\u52a8\u88ab Flask \u8f6c\u6362\u4e3a\u54cd\u5e94\u5bf9\u8c61\u3002\u4f60\u53ef\u4ee5\u8fd4\u56de\u591a\u79cd\u7c7b\u578b\uff0cFlask \u4f1a\u667a\u80fd\u5904\u7406\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5b57\u7b26\u4e32<\/strong>\uff1a\u81ea\u52a8\u8f6c\u6362\u4e3a HTML \u54cd\u5e94\uff0c\u72b6\u6001\u7801 200\u3002<\/li>\n\n\n\n<li><strong>\u5143\u7ec4<\/strong>\uff1a<code>(response_body, status_code)<\/code> \u6216 <code>(response_body, headers)<\/code>\u3002<\/li>\n\n\n\n<li><strong>Response \u5bf9\u8c61<\/strong>\uff1a\u624b\u52a8\u6784\u5efa\uff0c\u7528\u4e8e\u7cbe\u7ec6\u63a7\u5236\u3002<\/li>\n\n\n\n<li><strong>\u5b57\u5178\/\u5217\u8868<\/strong>\uff1a\u5982\u679c\u5b89\u88c5\u4e86 <code>flask.jsonify<\/code>\uff0c\u901a\u5e38\u5efa\u8bae\u663e\u5f0f\u4f7f\u7528 <code>jsonify<\/code> \u8f6c\u4e3a JSON\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83d\udce4 \u6784\u5efa\u54cd\u5e94\u7684\u5e38\u7528\u65b9\u5f0f<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\">A. \u7b80\u5355\u8fd4\u56de (\u6700\u5e38\u7528)<\/h5>\n\n\n\n<div class=\"chp-code-block chp-theme-github-dark chp-wrap-on\" data-chp-language=\"plaintext\" data-chp-line-start=\"1\" data-chp-highlight=\"\"><div class=\"chp-toolbar\"><div class=\"chp-toolbar-left\"><span class=\"chp-dots\"><span><\/span><span><\/span><span><\/span><\/span><span class=\"chp-language-label\">\u7eaf\u6587\u672c<\/span><\/div><div class=\"chp-toolbar-right\"><button type=\"button\" class=\"chp-copy-btn\" aria-label=\"\u590d\u5236\u4ee3\u7801\"><svg class=\"chp-icon-copy\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\/><\/svg><svg class=\"chp-icon-check\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\" style=\"display:none;\"><path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\/><\/svg><span class=\"chp-copy-text\">\u590d\u5236<\/span><\/button><\/div><\/div><div class=\"chp-code-wrapper\"><div class=\"chp-line-numbers\" aria-hidden=\"true\"><span>1<\/span><span>2<\/span><span>3<\/span><\/div><pre class=\"chp-pre\" style=\"font-size:14px;\"><code class=\"language-plaintext\">@app.route(&#039;\/hello&#039;)\ndef hello():\n    return &#039;Hello World&#039;  # \u9ed8\u8ba4 Content-Type: text\/html; charset=utf-8<\/code><\/pre><\/div><\/div>\n\n\n\n<h5 class=\"wp-block-heading\">B. \u8fd4\u56de JSON (API \u5f00\u53d1\u6807\u51c6)<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">\u4f7f\u7528 <code>jsonify<\/code> \u4e0d\u4ec5\u4f1a\u5c06\u5b57\u5178\u8f6c\u4e3a JSON \u5b57\u7b26\u4e32\uff0c\u8fd8\u4f1a\u81ea\u52a8\u8bbe\u7f6e <code>Content-Type: application\/json<\/code>\u3002<\/p>\n\n\n\n<div class=\"chp-code-block chp-theme-github-dark chp-wrap-on\" data-chp-language=\"plaintext\" data-chp-line-start=\"1\" data-chp-highlight=\"\"><div class=\"chp-toolbar\"><div class=\"chp-toolbar-left\"><span class=\"chp-dots\"><span><\/span><span><\/span><span><\/span><\/span><span class=\"chp-language-label\">\u7eaf\u6587\u672c<\/span><\/div><div class=\"chp-toolbar-right\"><button type=\"button\" class=\"chp-copy-btn\" aria-label=\"\u590d\u5236\u4ee3\u7801\"><svg class=\"chp-icon-copy\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\/><\/svg><svg class=\"chp-icon-check\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\" style=\"display:none;\"><path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\/><\/svg><span class=\"chp-copy-text\">\u590d\u5236<\/span><\/button><\/div><\/div><div class=\"chp-code-wrapper\"><div class=\"chp-line-numbers\" aria-hidden=\"true\"><span>1<\/span><span>2<\/span><span>3<\/span><span>4<\/span><span>5<\/span><span>6<\/span><span>7<\/span><span>8<\/span><span>9<\/span><\/div><pre class=\"chp-pre\" style=\"font-size:14px;\"><code class=\"language-plaintext\">from flask import jsonify\n\n@app.route(&#039;\/api\/data&#039;)\ndef get_data():\n    data = {\n        &quot;status&quot;: &quot;success&quot;,\n        &quot;items&quot;: [1, 2, 3]\n    }\n    return jsonify(data)<\/code><\/pre><\/div><\/div>\n\n\n\n<h5 class=\"wp-block-heading\">C. \u81ea\u5b9a\u4e49\u72b6\u6001\u7801\u548c Header<\/h5>\n\n\n\n<div class=\"chp-code-block chp-theme-github-dark chp-wrap-on\" data-chp-language=\"plaintext\" data-chp-line-start=\"1\" data-chp-highlight=\"\"><div class=\"chp-toolbar\"><div class=\"chp-toolbar-left\"><span class=\"chp-dots\"><span><\/span><span><\/span><span><\/span><\/span><span class=\"chp-language-label\">\u7eaf\u6587\u672c<\/span><\/div><div class=\"chp-toolbar-right\"><button type=\"button\" class=\"chp-copy-btn\" aria-label=\"\u590d\u5236\u4ee3\u7801\"><svg class=\"chp-icon-copy\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\/><\/svg><svg class=\"chp-icon-check\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\" style=\"display:none;\"><path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\/><\/svg><span class=\"chp-copy-text\">\u590d\u5236<\/span><\/button><\/div><\/div><div class=\"chp-code-wrapper\"><div class=\"chp-line-numbers\" aria-hidden=\"true\"><span>1<\/span><span>2<\/span><span>3<\/span><span>4<\/span><span>5<\/span><span>6<\/span><span>7<\/span><span>8<\/span><span>9<\/span><span>10<\/span><\/div><pre class=\"chp-pre\" style=\"font-size:14px;\"><code class=\"language-plaintext\">@app.route(&#039;\/created&#039;)\ndef created():\n    # \u8fd4\u56de 201 Created \u72b6\u6001\u7801\n    return &quot;Resource Created&quot;, 201\n\n@app.route(&#039;\/custom-header&#039;)\ndef custom_header():\n    response = app.make_response(&quot;Custom Response&quot;)\n    response.headers[&#039;X-Custom-Header&#039;] = &#039;MyValue&#039;\n    return response<\/code><\/pre><\/div><\/div>\n\n\n\n<h5 class=\"wp-block-heading\">D. \u91cd\u5b9a\u5411 (Redirect)<\/h5>\n\n\n\n<div class=\"chp-code-block chp-theme-github-dark chp-wrap-on\" data-chp-language=\"plaintext\" data-chp-line-start=\"1\" data-chp-highlight=\"\"><div class=\"chp-toolbar\"><div class=\"chp-toolbar-left\"><span class=\"chp-dots\"><span><\/span><span><\/span><span><\/span><\/span><span class=\"chp-language-label\">\u7eaf\u6587\u672c<\/span><\/div><div class=\"chp-toolbar-right\"><button type=\"button\" class=\"chp-copy-btn\" aria-label=\"\u590d\u5236\u4ee3\u7801\"><svg class=\"chp-icon-copy\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\/><\/svg><svg class=\"chp-icon-check\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\" style=\"display:none;\"><path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\/><\/svg><span class=\"chp-copy-text\">\u590d\u5236<\/span><\/button><\/div><\/div><div class=\"chp-code-wrapper\"><div class=\"chp-line-numbers\" aria-hidden=\"true\"><span>1<\/span><span>2<\/span><span>3<\/span><span>4<\/span><span>5<\/span><span>6<\/span><\/div><pre class=\"chp-pre\" style=\"font-size:14px;\"><code class=\"language-plaintext\">from flask import redirect, url_for\n\n@app.route(&#039;\/old-page&#039;)\ndef old_page():\n    # 302 \u4e34\u65f6\u91cd\u5b9a\u5411\u5230\u9996\u9875\n    return redirect(url_for(&#039;index&#039;))<\/code><\/pre><\/div><\/div>\n\n\n\n<h5 class=\"wp-block-heading\">E. \u9519\u8bef\u54cd\u5e94<\/h5>\n\n\n\n<div class=\"chp-code-block chp-theme-github-dark chp-wrap-on\" data-chp-language=\"plaintext\" data-chp-line-start=\"1\" data-chp-highlight=\"\"><div class=\"chp-toolbar\"><div class=\"chp-toolbar-left\"><span class=\"chp-dots\"><span><\/span><span><\/span><span><\/span><\/span><span class=\"chp-language-label\">\u7eaf\u6587\u672c<\/span><\/div><div class=\"chp-toolbar-right\"><button type=\"button\" class=\"chp-copy-btn\" aria-label=\"\u590d\u5236\u4ee3\u7801\"><svg class=\"chp-icon-copy\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\/><\/svg><svg class=\"chp-icon-check\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\" style=\"display:none;\"><path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\/><\/svg><span class=\"chp-copy-text\">\u590d\u5236<\/span><\/button><\/div><\/div><div class=\"chp-code-wrapper\"><div class=\"chp-line-numbers\" aria-hidden=\"true\"><span>1<\/span><span>2<\/span><span>3<\/span><\/div><pre class=\"chp-pre\" style=\"font-size:14px;\"><code class=\"language-plaintext\">@app.errorhandler(404)\ndef not_found(error):\n    return jsonify({&quot;error&quot;: &quot;Not Found&quot;}), 404<\/code><\/pre><\/div><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">3. \u9ad8\u7ea7\u6280\u5de7\uff1aMake Response &amp; After Request<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83d\udd27 <code>make_response()<\/code><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\u5f53\u4f60\u9700\u8981\u4fee\u6539\u54cd\u5e94\u5934\uff08\u5982\u8bbe\u7f6e Cookie\u3001CORS \u5934\uff09\u65f6\uff0c\u4f7f\u7528 <code>make_response<\/code> \u5c06\u666e\u901a\u8fd4\u56de\u503c\u5305\u88c5\u6210\u54cd\u5e94\u5bf9\u8c61\u3002<\/p>\n\n\n\n<div class=\"chp-code-block chp-theme-github-dark chp-wrap-on\" data-chp-language=\"plaintext\" data-chp-line-start=\"1\" data-chp-highlight=\"\"><div class=\"chp-toolbar\"><div class=\"chp-toolbar-left\"><span class=\"chp-dots\"><span><\/span><span><\/span><span><\/span><\/span><span class=\"chp-language-label\">\u7eaf\u6587\u672c<\/span><\/div><div class=\"chp-toolbar-right\"><button type=\"button\" class=\"chp-copy-btn\" aria-label=\"\u590d\u5236\u4ee3\u7801\"><svg class=\"chp-icon-copy\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\/><\/svg><svg class=\"chp-icon-check\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\" style=\"display:none;\"><path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\/><\/svg><span class=\"chp-copy-text\">\u590d\u5236<\/span><\/button><\/div><\/div><div class=\"chp-code-wrapper\"><div class=\"chp-line-numbers\" aria-hidden=\"true\"><span>1<\/span><span>2<\/span><span>3<\/span><span>4<\/span><span>5<\/span><span>6<\/span><span>7<\/span><span>8<\/span><\/div><pre class=\"chp-pre\" style=\"font-size:14px;\"><code class=\"language-plaintext\">from flask import make_response\n\n@app.route(&#039;\/set-cookie&#039;)\ndef set_cookie():\n    resp = make_response(&quot;Cookie Set!&quot;)\n    # \u8bbe\u7f6e Cookie: key, value, max_age(\u79d2)\n    resp.set_cookie(&#039;username&#039;, &#039;john_doe&#039;, max_age=3600)\n    return resp<\/code><\/pre><\/div><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83d\udd04 <code>@app.after_request<\/code><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679c\u4f60\u5e0c\u671b<strong>\u6bcf\u4e00\u4e2a<\/strong>\u54cd\u5e94\u90fd\u5e26\u4e0a\u76f8\u540c\u7684 Header\uff08\u4f8b\u5982\u89e3\u51b3\u8de8\u57df\u95ee\u9898 CORS\uff09\uff0c\u53ef\u4ee5\u4f7f\u7528\u8fd9\u4e2a\u88c5\u9970\u5668\u3002<\/p>\n\n\n\n<div class=\"chp-code-block chp-theme-github-dark chp-wrap-on\" data-chp-language=\"plaintext\" data-chp-line-start=\"1\" data-chp-highlight=\"\"><div class=\"chp-toolbar\"><div class=\"chp-toolbar-left\"><span class=\"chp-dots\"><span><\/span><span><\/span><span><\/span><\/span><span class=\"chp-language-label\">\u7eaf\u6587\u672c<\/span><\/div><div class=\"chp-toolbar-right\"><button type=\"button\" class=\"chp-copy-btn\" aria-label=\"\u590d\u5236\u4ee3\u7801\"><svg class=\"chp-icon-copy\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\/><\/svg><svg class=\"chp-icon-check\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\" style=\"display:none;\"><path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\/><\/svg><span class=\"chp-copy-text\">\u590d\u5236<\/span><\/button><\/div><\/div><div class=\"chp-code-wrapper\"><div class=\"chp-line-numbers\" aria-hidden=\"true\"><span>1<\/span><span>2<\/span><span>3<\/span><span>4<\/span><span>5<\/span><\/div><pre class=\"chp-pre\" style=\"font-size:14px;\"><code class=\"language-plaintext\">@app.after_request\ndef add_cors_headers(response):\n    response.headers[&#039;Access-Control-Allow-Origin&#039;] = &#039;*&#039;\n    response.headers[&#039;Access-Control-Allow-Methods&#039;] = &#039;GET, POST, OPTIONS&#039;\n    return response<\/code><\/pre><\/div><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u26a0\ufe0f \u5e38\u89c1\u9677\u9631\u4e0e\u6700\u4f73\u5b9e\u8df5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong><code>request.get_json()<\/code> \u53ef\u80fd\u8fd4\u56de <code>None<\/code><\/strong>\uff1a<br>\u5982\u679c\u8bf7\u6c42\u5934\u4e2d\u6ca1\u6709 <code>Content-Type: application\/json<\/code> \u6216\u8005 Body \u4e3a\u7a7a\uff0c\u5b83\u4f1a\u8fd4\u56de <code>None<\/code>\u3002\u52a1\u5fc5\u5148\u68c0\u67e5\uff1a<\/li>\n<\/ol>\n\n\n\n<div class=\"chp-code-block chp-theme-github-dark chp-wrap-on\" data-chp-language=\"plaintext\" data-chp-line-start=\"1\" data-chp-highlight=\"\"><div class=\"chp-toolbar\"><div class=\"chp-toolbar-left\"><span class=\"chp-dots\"><span><\/span><span><\/span><span><\/span><\/span><span class=\"chp-language-label\">\u7eaf\u6587\u672c<\/span><\/div><div class=\"chp-toolbar-right\"><button type=\"button\" class=\"chp-copy-btn\" aria-label=\"\u590d\u5236\u4ee3\u7801\"><svg class=\"chp-icon-copy\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\/><\/svg><svg class=\"chp-icon-check\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\" style=\"display:none;\"><path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\/><\/svg><span class=\"chp-copy-text\">\u590d\u5236<\/span><\/button><\/div><\/div><div class=\"chp-code-wrapper\"><div class=\"chp-line-numbers\" aria-hidden=\"true\"><span>1<\/span><span>2<\/span><span>3<\/span><\/div><pre class=\"chp-pre\" style=\"font-size:14px;\"><code class=\"language-plaintext\">   data = request.get_json(silent=True) # silent=True \u51fa\u9519\u65f6\u8fd4\u56de None \u800c\u4e0d\u662f\u629b\u5f02\u5e38\n   if not data:\n       return &quot;Invalid JSON&quot;, 400<\/code><\/pre><\/div><\/div>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u4e0d\u8981\u76f4\u63a5\u8fd4\u56de\u5b57\u5178<\/strong>\uff1a<br>\u5728\u65e7\u7248\u672c Flask \u4e2d\uff0c\u76f4\u63a5\u8fd4\u56de\u5b57\u5178\u53ef\u80fd\u4f1a\u62a5\u9519\u6216\u884c\u4e3a\u4e0d\u4e00\u81f4\u3002<strong>\u59cb\u7ec8\u4f7f\u7528 <code>jsonify()<\/code><\/strong>\u3002<\/li>\n\n\n\n<li><strong>\u5927\u6587\u4ef6\u5904\u7406<\/strong>\uff1a<br>\u5982\u679c\u9700\u8981\u8fd4\u56de\u5927\u6587\u4ef6\u6216\u6d41\u5f0f\u6570\u636e\uff0c\u4e0d\u8981\u4e00\u6b21\u6027\u8bfb\u5165\u5185\u5b58\uff0c\u4f7f\u7528 <code>Response<\/code> \u7684\u751f\u6210\u5668\u6a21\u5f0f\u6216 <code>send_file<\/code> \/ <code>send_from_directory<\/code>\u3002<\/li>\n\n\n\n<li><strong>\u5b89\u5168\u6027<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6c38\u8fdc\u4e0d\u8981\u4fe1\u4efb <code>request.form<\/code> \u6216 <code>request.args<\/code> \u4e2d\u7684\u6570\u636e\uff0c\u4f7f\u7528\u524d\u5fc5\u987b\u8fdb\u884c\u9a8c\u8bc1\u548c\u6e05\u6d17\uff08Sanitization\uff09\u3002<\/li>\n\n\n\n<li>\u654f\u611f\u4fe1\u606f\u4e0d\u8981\u653e\u5728 URL \u53c2\u6570\u4e2d\uff08\u56e0\u4e3a URL \u4f1a\u88ab\u8bb0\u5f55\u5728\u670d\u52a1\u5668\u65e5\u5fd7\u91cc\uff09\uff0c\u5e94\u653e\u5728 POST Body \u6216 Header \u4e2d\u3002<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udcdd \u603b\u7ed3\u6d41\u7a0b\u56fe<\/h3>\n\n\n\n<div class=\"chp-code-block chp-theme-github-dark chp-wrap-on\" data-chp-language=\"plaintext\" data-chp-line-start=\"1\" data-chp-highlight=\"\"><div class=\"chp-toolbar\"><div class=\"chp-toolbar-left\"><span class=\"chp-dots\"><span><\/span><span><\/span><span><\/span><\/span><span class=\"chp-language-label\">\u7eaf\u6587\u672c<\/span><\/div><div class=\"chp-toolbar-right\"><button type=\"button\" class=\"chp-copy-btn\" aria-label=\"\u590d\u5236\u4ee3\u7801\"><svg class=\"chp-icon-copy\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"\/><\/svg><svg class=\"chp-icon-check\" viewBox=\"0 0 24 24\" width=\"14\" height=\"14\" aria-hidden=\"true\" style=\"display:none;\"><path fill=\"currentColor\" d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"\/><\/svg><span class=\"chp-copy-text\">\u590d\u5236<\/span><\/button><\/div><\/div><div class=\"chp-code-wrapper\"><div class=\"chp-line-numbers\" aria-hidden=\"true\"><span>1<\/span><span>2<\/span><span>3<\/span><span>4<\/span><span>5<\/span><span>6<\/span><span>7<\/span><span>8<\/span><span>9<\/span><span>10<\/span><span>11<\/span><span>12<\/span><span>13<\/span><\/div><pre class=\"chp-pre\" style=\"font-size:14px;\"><code class=\"language-plaintext\">\u5ba2\u6237\u7aef\u53d1\u8d77\u8bf7\u6c42\n      \u2193\nFlask \u63a5\u6536 \u2192 \u521b\u5efa request \u5bf9\u8c61\n      \u2193\n\u8def\u7531\u5339\u914d \u2192 \u8fdb\u5165\u89c6\u56fe\u51fd\u6570\n      \u2193\n\u89c6\u56fe\u51fd\u6570\u8bfb\u53d6 request.args \/ .form \/ .get_json()\n      \u2193\n\u4e1a\u52a1\u903b\u8f91\u5904\u7406...\n      \u2193\n\u89c6\u56fe\u51fd\u6570\u8fd4\u56de (\u5b57\u7b26\u4e32 \/ jsonify \/ Response)\n      \u2193\nFlask \u8f6c\u6362\u4e3a HTTP \u54cd\u5e94 \u2192 \u53d1\u9001\u7ed9\u5ba2\u6237\u7aef<\/code><\/pre><\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u638c\u63e1\u4e86\u8bf7\u6c42\u4e0e\u54cd\u5e94\uff0c\u4f60\u5c31\u6253\u901a\u4e86 Flask \u5e94\u7528\u7684\u201c\u4efb\u7763\u4e8c\u8109\u201d\u3002\u63a5\u4e0b\u6765\uff0c\u4f60\u60f3\u5b66\u4e60\u5982\u4f55<strong>\u6e32\u67d3 HTML \u6a21\u677f (Jinja2)<\/strong> \u8ba9\u9875\u9762\u66f4\u6f02\u4eae\uff0c\u8fd8\u662f\u5b66\u4e60\u5982\u4f55<strong>\u8fde\u63a5\u6570\u636e\u5e93<\/strong>\u5b58\u50a8\u8fd9\u4e9b\u6570\u636e\uff1f<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5728 Flask \u4e2d\uff0c\u8bf7\u6c42\uff08Request\uff09\u548c\u54cd\u5e94\uff08Respo&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16],"tags":[],"class_list":["post-167","post","type-post","status-publish","format-standard","hentry","category-flask-"],"_links":{"self":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts\/167","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/comments?post=167"}],"version-history":[{"count":1,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts\/167\/revisions"}],"predecessor-version":[{"id":168,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/posts\/167\/revisions\/168"}],"wp:attachment":[{"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/media?parent=167"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/categories?post=167"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.52runoob.com\/index.php\/wp-json\/wp\/v2\/tags?post=167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}