django前后端分离解决跨域

本文详细介绍了如何使用Python的虚拟环境创建和管理Django项目,包括安装虚拟环境、配置数据库、创建Django工程、创建后台应用、配置JWT认证以及解决跨域问题。同时,还涉及到了Django的数据库配置、应用注册、URL路由以及安装和使用django-cors-headers来实现跨域访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.安装虚拟环境 :

mkvirtualenv  dj_admin (环境名)

若系统中存在多个python版本在环境名前需指定python版本
2.配置虚拟环境,安装django

pip install django  (安装依赖包)

3.进入虚拟环境 :

workon 环境名
退出虚拟环境	:deactivate    
查看虚拟环境  :workon      
删除虚拟环境	rmvirtualenv
删除依赖包	pip uninstall  依赖包名

4.创建工程(在虚拟环境下创建)

django-admin startproject 工程名
django-admin startproject  dj

5.创建数据库,创建项目使用的数据库

安装  pip install PyMySQL
      pip install mysqlclient

项目settings.py文件中配置数据库连接
settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 数据库引擎
        'HOST': '127.0.0.1',  # 数据库主机
        'PORT': 3306,  # 数据库端口
        'USER': 'root',  # 数据库用户名
        'PASSWORD': '',  # 数据库用户密码
        'NAME': 'bise'  # 数据库名字
    },
}


_init_.py(即dj/__init.py文件)
import pymysql
pymysql.install_as_MySQLdb()


执行迁移
python manage.py makemigrations
python manage.py migrate


进入工程manage.py同级目录下,创建后台超级管理员账户:
python manage.py createsuperuser

6.创建后台应用 :

python manage.py startapp  应用app名字
python manage.py startapp dj_admin

项目settings.py文件中配置应用
INSTALLED_APPS = (
    ...
    'dj_admin.apps.DjAdminConfig',#dj_admin/apps文件内类名
    ...
)
在应用文件夹内新建urls.py文件(dj_admin/urls.py)

安装   pip install djangorestframework-jwt

urls.py文件写入
from django.conf.urls import url
from rest_framework_jwt.views import obtain_jwt_token
urlpatterns = [
    url('^authorizations/$',obtain_jwt_token),
]
在应用文件夹内新建utils.py,返回数据,自定义返回数据
from rest_framework_jwt.utils import jwt_response_payload_handler

def user_response_payload_handler(token,user=None,response=None):
    print(user.username)
    print(token)
    return {
        'token':token,
        'id':user.id,
        'username':user.username
    }


setting.py配置
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
    ),
}

import datetime
JWT_AUTH = {
    'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),#过期时间
    'JWT_RESPONSE_PAYLOAD_HANDLER': 'dj_admin.utils.user_response_payload_handler',#自定义返回的数据,dj_admin/utils.py.文件内响应函数
}

7.工程同名文件/urls.py
编写总路由:
url(’^提供给前端的访问后台总接口’,include(‘后台应用.urls’))

#后端工程url.py路径
from django.conf.urls import url, include
from django.contrib import admin
from django.conf.urls import url
from rest_framework_jwt.views import obtain_jwt_token

urlpatterns = [
    url('admin/', admin.site.urls),
    url('^dj_admin/',include('dj_admin.urls'))#'dj_admin.urls' dj_admin 应用文件下url路径

]

8.settings.py


下载包 
pip install django-cors-headers

添加应用
INSTALLED_APPS = (
    ...
    'corsheaders',
    ...
)

设置中间件
MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    ...
]

添加白名单
CORS_ORIGIN_WHITELIST = (
    '127.0.0.1:8080',
    'localhost:8080',
    #'希望能够访问的iP端口'
)
CORS_ALLOW_CREDENTIALS = True  # 允许携带cookie
CORS_ORIGIN_ALLOW_ALL= True  #这句不加会只发一个options请求,post请求不会发出

到此为止跨域就解决了,前后端分离后台就可以进去了

诚邀大佬指点,若有不对之处,大佬多包涵,不吝赐教

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值