使用Flask和Django中解決跨域請求問題

Flask解決跨域

1、下載flask_cors包

pip install flask-cors

2、使用flask_cors的CORS

代碼示例

from flask_cors import *
app = Flask(__name__)
CORS(app, supports_credentials=True)

Flask-CORS文檔: https://flask-cors.readthedocs.io/en/latest/

Django解決跨域

1、安裝django-cors-headers

pip install django-cors-headers

2、修改settings.py

INSTALLED_APPS = [
    ...
    'corsheaders',
    ...
]
MIDDLEWARE_CLASSES = (
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware', # 添加這一行
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware', 註釋這一行
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
# 跨域增加忽略
CORS_ALLOW_CREDENTIALS = True #  指明在跨域訪問中,後端是否支持對cookie的操作
CORS_ORIGIN_ALLOW_ALL = True # 允許所有主機請求你的API
CORS_ORIGIN_WHITELIST = ( # 跨域請求白名單,為空時默認為全部
    'http://127.0.0.1:8080',
    'http://localhost:8080',
)
CORS_ALLOW_METHODS = (
    'DELETE',
    'GET',
    'OPTIONS',
    'PATCH',
    'POST',
    'PUT',
    'VIEW',
)
CORS_ALLOW_HEADERS = (
    'XMLHttpRequest',
    'X_FILENAME',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
)

補充:Flask和Django的區別

(1)Flask

Flask確實很“輕”,不愧是Micro Framework,從Django轉向Flask的開發者一定會如此感慨,除非二者均為深入使用過

Flask自由、靈活,可擴展性強,第三方庫的選擇面廣,開發時可以結合自己最喜歡用的輪子,也能結合最流行最強大的Python庫

入門簡單,即便沒有多少web開發經驗,也能很快做出網站

非常適用於小型網站

非常適用於開發web服務的API

開發大型網站無壓力,但代碼架構需要自己設計,開發成本取決於開發者的能力和經驗

各方面性能均等於或優於Django

Django自帶的或第三方的好評如潮的功能,Flask上總會找到與之類似第三方庫

Flask靈活開發,Python高手基本都會喜歡Flask,但對Django卻可能褒貶不一

Flask與關系型數據庫的配合使用不弱於Django,而其與NoSQL數據庫的配合遠遠優於Django

Flask比Django更加Pythonic,與Python的philosophy更加吻合

(2)Django

Django太重瞭,除瞭web框架,自帶ORM和模板引擎,靈活和自由度不夠高

Django能開發小應用,但總會有“殺雞焉用牛刀”的感覺

Django的自帶ORM非常優秀,綜合評價略高於SQLAlchemy

Django自帶的模板引擎簡單好用,但其強大程度和綜合評價略低於Jinja

Django自帶ORM也使Django與關系型數據庫耦合度過高,如果想使用MongoDB等NoSQL數據,需要選取合適的第三方庫,且總感覺Django+SQL才是天生一對的搭配,Django+NoSQL砍掉瞭Django的半壁江山

Django目前支持Jinja等非官方模板引擎

Django自帶的數據庫管理app好評如潮

Django非常適合企業級網站的開發:快速、靠譜、穩定

Django成熟、穩定、完善,但相比於Flask,Django的整體生態相對封閉

Django是Python web框架的先驅,用戶多,第三方庫最豐富,最好的Python庫,如果不能直接用到Django中,也一定能找到與之對應的移植

Django上手也比較容易,開發文檔詳細、完善,相關資料豐富

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。

推薦閱讀:

    None Found