一.django安装创建

第一步:安装
py -m pip install Django==5.2.5
第二步:查看是否安装成功
py -m django --version
第三步:先创建项目文件夹
mkdir 文件夹
第四步:创建django项目
django-admin startproject mysite 文件夹
第五步:创建app
py manage.py startapp app名称

二.settings文件配置

(1)基本配置

  • 调试模式
在开发调试过程中会自动检测代码是否发生更改,根据检测结果执行是否刷新重启系统
DEBUG = True
  • 域名访问权限
ALLOWED_HOSTS 域名访问权限:设置可访问的域名,默认值为空列表。
当DEBUG为True并且ALLOWED_HOSTS为空列表时,项目只允许以localhost或127.0.0.1在浏览器上访问。
当DEBUG为False时,ALLOWED_HOSTS为必填项,否则程序无法启动,
如果想允许所有域名访问,可设置ALLOW_HOSTS=['*']。

(2)模板配置

"DIRS":指定templates所在的位置,通常用来指定主app下的模板路径,因为子app的templates可以通过下面的"APP_DIRS"查找到。
"APP_DIRS":True表示可以在已经注册了的子app的目录下查找templates文件

(3)资源文件配置

  • 静态资源文件
  1. 默认配置,app下的static目录为静态资源,可以在static路由下直接访问。其他目录不行。
    STATIC_URL = 'static/'
  2. 自定义静态资源集合配置,可以访问列表中的目录作为静态资源(在static路由下可以直接访问)
    # 设置静态资源文件集合
    STATICFILES_DIRS = [BASE_DIR / "static", BASE_DIR / "helloWorld/images"]
    • media媒体资源文件
     urlpatterns = [
         path('',,name=''),
     ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
     
    settings:
    # 设置媒体路由
    MEDIA_URL = 'media/'
    # 设置media目录的完整路径
    MEDIA_ROOT = BASE_DIR / 'media'

    (4)数据库配置

    Django提供4种数据库引擎:
    'django.db.backends.postgresql'
    'django.db.backends.mysql'
    'django.db.backends.sqlite3'
    'django.db.backends.oracle'
    • 使用mysql数据库
    1. 安装mysql连接模块

      如果要把上述的连接信息改成MySQL数据库,首先需要安装MySQL连接模块
      pip install mysqlclient
      或
      pip install pymysql
    2. 连接mysql
      DATABASES = {
      'default': {
      'ENGINE': 'django.db.backends.mysql',
      'NAME': 'db',    # 数据库名
      'USER': 'root',    # 用户
      'PASSWORD': '123',    # 密码
      'HOST': 'localhost',
      'PORT': '3306'    # 端口号
      }
      }
    3. 在settings的同级目录下的__init__文件中导入pymysql
    注意:如果你安装的是django官方的mysqlclient连接模块,则不需要导入,
    如果你安装的不是官方的是pymsql连接模块则需要导入
    import pymysql
    pymysql.install_as_MySQLdb()

    三.跨域配置

    在Django中配置CORS(跨域资源共享)有几种方法

    方法一:使用django-cors-headers(推荐)

    这是最常用和推荐的方法。
    1. 安装django-cors-headers
    pip install django-cors-headers
    2. 在settings.py中配置
    1. app里注册(必填)
      # 添加到
      INSTALLED_APPSINSTALLED_APPS = [# ... 其他应用
      'corsheaders',
      # ... 其他应用
      ]
    2. 添加中间件,放在最前面(必填)
      # 添加到MIDDLEWARE(注意顺序很重要,要放在尽可能靠前的位置)MIDDLEWARE = [
      'corsheaders.middleware.CorsMiddleware',
      # ... 其他中间件]
    3. CORS配置(必填)

      方式1:# 允许所有域名(仅用于开发环境,生产环境应具体指定)
      CORS_ALLOW_ALL_ORIGINS = True
      # 允许跨域请求时携带用户凭证
      CORS_ALLOW_CREDENTIALS = True
      
      方式2:
      # 或者指定允许的域名(推荐用于生产环境)
      # CORS_ALLOWED_ORIGINS = [
      # "http://localhost:8080",
      # "http://127.0.0.1:8080",
      # "http://localhost:3000",
      # "https://yourdomain.com",]
      # 允许跨域请求时携带用户凭证
      CORS_ALLOW_CREDENTIALS = True
    4. 允许的HTTP方法

      CORS_ALLOW_METHODS = [
      "DELETE",
      "GET",
      "OPTIONS",
      "PATCH",
      "POST",
      "PUT",]
    5. 允许的头部字段

      CORS_ALLOW_HEADERS = [
      "accept",
      "authorization",
      "content-type",
      "user-agent",
      "x-csrftoken",
      "x-requested-with",]
    6. 是否允许携带凭证(cookies, authorization headers等)

      CORS_ALLOW_CREDENTIALS = True

    四.创建管理员命令行

    python manage.py createsuperuser

    五.时区时间设置

    将时间设置为北京时间
    TIME_ZONE = 'Asia/Shanghai'  # 设置为北京时间
    USE_TZ = False

    六.DRF-jwt配置

    1.旧版本jwt(django3以下能用)

    (1)安装并配置DRF和DRF-JWT
    pip install djangorestframework
    pip install djangorestframework-jwt
    • 在app里面注册
    # 定义Django项目中安装的应用列表
    INSTALLED_APPS = [ 
        # 导入rest_framework和rest_framework_jwt模块,用于支持RESTful API的开发和JWT认证 
        'rest_framework', 
        'rest_framework_jwt',
    ]
    (2)视图中生成jwt
    from rest_framework_jwt.settings import api_settings
    jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER 
    jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER 
    from rest_framework_jwt.settings import api_settings
    
    # 直接从数据库中获取指定用户名和密码的用户对象 
    user = SysUser.objects.get(username='admin', password='123456') 
    
    # 从API设置中获取JWT payload处理函数和编码处理函数 
    jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER 
    jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER 
    
    payload = jwt_payload_handler(user) # 将用户对象(单个对象)传递进去,内部自动转换成python字典 
    
    token = jwt_encode_handler(payload) # 将python字典编码成jwt格式的字符串。这一步才是加密的核心。 

    (3)设置jwt检验
    ①使用注意(是干嘛的)
    • 视图类必须继承DRF的类才能自动生效jwt校验,如:APIView,GenericAPIView,ViewSet
    • 视图类如果是继承的原始django的类就不能自动生效jwt校验:如:View
    • 具体示例:客户端请求时,在 HTTP 头里带上了合法的 JWT:Authorization: JWT 请求头这个Authorization参数的格式必须是这样
    • 在根据路由进入drf视图类之前会自动检验请求头中的Authorization数,如果不合规则拒绝进入
    ②全局设置jwt校验
    REST_FRAMEWORK = {...}
    • 有什么用
      • 它告诉 DRF:所有接口默认使用 JWT 认证,且必须登录才能访问。
    REST_FRAMEWORK = {
        'DEFAULT_AUTHENTICATION_CLASSES': [
            'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        ],
        'DEFAULT_PERMISSION_CLASSES': [
            'rest_framework.permissions.IsAuthenticated',
        ],
    }

    ③局部设置
    1. 局部启用 JWT(默认全局没配,只在指定视图启用)只会在当前的接口走jwt校验,对其他接口没有影响
      from rest_framework.views import APIView
      from rest_framework.permissions import IsAuthenticated
      from rest_framework_jwt.authentication import JSONWebTokenAuthentication
      class ProfileView(APIView):
          # 只在当前视图启用 JWT 认证
          authentication_classes = [JSONWebTokenAuthentication]
          permission_classes = [IsAuthenticated]
      
          def get(self, request):
              return Response({"username": request.user.username})
    2. 局部禁用 JWT(全局已启用,但某个接口不需要)
    class LoginView(APIView):
        # 登录接口不需要校验 token
        authentication_classes = []   # 禁用任何认证
        permission_classes = []       # 禁用任何权限
    (4)配置生成jwt格式
    JWT_AUTH = {...}
    1. 有什么用
      用来控制 JWT 的具体行为,比如:
      • token 有效期
      • 是否允许刷新
      • token 前缀(如 JWTBearer
      • 签名算法、密钥、载荷处理函数等
    2. 设置token的过期时间
    import datetime
    # JWT认证配置
    # 配置JSON Web Token相关的参数,用于用户身份验证
    JWT_AUTH = {
     # JWT的过期时间1天,days 表示天, hours 表示小时, minutes 表示分钟, seconds表示秒
     'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
    }

      2.新版本jwt:simple-jwt

      注意:在生成jwt的时候,使用的是内置的auth_user表,从这个表里面查找是否存在用户信息
      (1)安装并配置DRF和DRF-simpleJWT
      pip install djangorestframework
      pip install djangorestframework-simplejwt
      • 在app里面注册
      # 定义Django项目中安装的应用列表
      INSTALLED_APPS = [ 
          # 导入rest_framework和rest_framework_jwt模块,用于支持RESTful API的开发和JWT认证 
          'rest_framework', 
          'rest_framework_simplejwt',
      ]
      (2)生成jwt
      # urls.py
      from rest_framework_simplejwt.views import (
          TokenObtainPairView,   # 登录(返回 access + refresh)
          TokenRefreshView,      # 刷新
          TokenVerifyView)       # 校验
      
      urlpatterns = [
          path('api/login/',  TokenObtainPairView.as_view(), name='token_obtain'),
          path('api/refresh/', TokenRefreshView.as_view(),  name='token_refresh'),
          path('api/verify/',  TokenVerifyView.as_view(),   name='token_verify'),
      ]
      (3)设置jwt校验
      注意:请求头中不填写Authorization的时候,不会触发jwt校验
      ①使用注意(是干嘛的)
      • 视图类必须继承DRF的类才能自动生效jwt校验,如:APIView,GenericAPIView,ViewSet
      • 视图类如果是继承的原始django的类就不能自动生效jwt校验:如:View
      • 具体示例:客户端请求时,在 HTTP 头里带上了合法的 JWT:Authorization: JWT/Bearer 请求头这个Authorization参数的格式必须是这样
      • 在根据路由进入drf视图类之前会自动检验请求头中的Authorization数,如果不合规则拒绝进入
      ②全局设置jwt校验
      REST_FRAMEWORK = {...}

      • 有什么用
        • 它告诉 DRF:所有接口默认使用 JWT 认证,且必须登录才能访问。
      REST_FRAMEWORK = {
          # jwt认证
          'DEFAULT_AUTHENTICATION_CLASSES': [  # 全局认证
              'rest_framework_simplejwt.authentication.JWTAuthentication',
          ],
          # 权限认证
          'DEFAULT_PERMISSION_CLASSES': [
              'rest_framework.permissions.IsAuthenticated',  
          ],
      }
      ③局部设置
      1. 局部启用 JWT(默认全局没配,只在指定视图启用)

        只会在当前的接口走jwt校验,对其他接口没有影响
        authentication_classes = [JWTAuthentication]
        permission_classes = [IsAuthenticated]
        from rest_framework.views import APIView
        from rest_framework.response import Response
        from rest_framework_simplejwt.authentication import JWTAuthentication
        from rest_framework.permissions import IsAuthenticated
        
        class ProfileView(APIView):
            authentication_classes = [JWTAuthentication]
            permission_classes = [IsAuthenticated]
        
            def get(self, request):
                return Response({"uid": request.user.id})

      2. 局部禁用 JWT(全局已启用,但某个接口不需要)
      class LoginView(APIView):
          # 登录接口不需要校验 token
          authentication_classes = []   # 禁用任何认证
          permission_classes = []       # 禁用任何权限
      (4)配置生成jwt格式
      SIMPLE_JWT = {...}
      1. 有什么用
        用来控制 JWT 的具体行为,比如:
        • token 有效期
        • 是否允许刷新
        • token 前缀(如 JWTBearer
        • 签名算法、密钥、载荷处理函数等
      2. 设置token的过期时间
      from datetime import timedelta
      SIMPLE_JWT = {                         # ④核心参数
          'ACCESS_TOKEN_LIFETIME':  timedelta(minutes=30),
          'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
          'AUTH_HEADER_TYPES': ('Bearer',),  # 请求头前缀
          'USER_ID_CLAIM': 'user_id',        # payload 中用户 ID 字段
      }

        七.数据库密码加载环境变量

        1.安装 pip install django-environ 然后在settings文件中加入代码

        import environ  # 加载.env文件的包
        
        env = environ.Env()  # 创建一个Env对象
        environ.Env.read_env("D:\爬虫学习\AI_Compny\AI_Compny\django_back\.env")  
        # 读取 .env,里面添加你的.env路径

        2.数据库配置

        
        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.mysql',
                'NAME': 'ai_compny',  # 数据库名
                'USER': 'root',  # 用户
                'PASSWORD': env('DB_PASSWORD'),  # 密码
                'HOST': 'localhost',
                'PORT': '3306',  # 端口号
            }
        }

        3.在manage.py的同级目录下创建.env文件

        DB_PASSWORD=数据库密码

        八.requirements.txt文件配置

        1.有什么用

        别人安装python包的时候,可以直接运行这个文件,然后自动安装这个文件里面所有的包

        2.生成python包依赖清单

        (1)方式1
        在当前python项目的虚拟环境下运行这个命令,就会自动创建requirements.txt文件,并把虚拟环境的所有包依赖自动添加到这个文件
        pip freeze > requirements.txt

        3.安装python包依赖

        一次性安装requirements.txt文件中列出的所有库,确保环境一致。
        注意:-r 后面需要是requirements.txt的文件路径
        pip install -r requirements.txt

        Logo

        腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

        更多推荐