• Django配置相关及其它


    配置

    模板

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [
                os.path.join(BASE_DIR, 'templates1'),  # 根目录->templates1
                os.path.join(BASE_DIR, 'templates2'),  # 根目录->templates2
            ],  # 配置render()函数在上述路径下寻找模板
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]
    Code

    静态文件

    # 静态文件保存目录的别名
    STATIC_URL = '/static/'
    
    # 静态文件存放文件夹
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, "static1"),
        os.path.join(BASE_DIR, "static2"),
    ]
    # 上述配置的效果就是 请求指定别名会在指定目录下寻找指定文件
    # 例:127.0.0.1:8000/static/test.css 会在STATICFILES_DIRS节中配置的每个目录寻找名为test.css的文件
    Code

    数据库连接信息

     1 DATABASES = {
     2     'default': {
     3         'ENGINE': 'django.db.backends.mysql',  # 连接的数据库类型
     4         'HOST': '127.0.0.1',  # 连接数据库的地址
     5         'PORT': 3306,  # 端口
     6         'NAME': "testdb",  # 数据库名称
     7         'USER': 'root',  # 用户
     8         'PASSWORD': 'root'  # 密码
     9     }
    10 }
    Code

    控制台输出执行的sql

     1 LOGGING = {
     2     'version': 1,
     3     'disable_existing_loggers': False,
     4     'handlers': {
     5         'console': {
     6             'level': 'DEBUG',
     7             'class': 'logging.StreamHandler',
     8         },
     9     },
    10     'loggers': {
    11         'django.db.backends': {
    12             'handlers': ['console'],
    13             'propagate': True,
    14             'level': 'DEBUG',
    15         },
    16     }
    17 }
    Code

    Session相关

    • 引擎

      • 数据库(默认)
        SESSION_ENGINE = 'django.contrib.sessions.backends.db'
      • 缓存
        SESSION_ENGINE = 'django.contrib.sessions.backends.cache'  # 引擎
        SESSION_CACHE_ALIAS = 'default'  # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
      • 缓存+数据库
        SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'
      • 加密
        SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'
    • 其它公用设置项

      SESSION_COOKIE_NAME = "sessionid"  # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
      SESSION_COOKIE_PATH = "/"  # Session的cookie保存的路径(默认)
      SESSION_COOKIE_DOMAIN = None  # Session的cookie保存的域名(默认)
      SESSION_COOKIE_SECURE = False  # 是否Https传输cookie(默认)
      SESSION_COOKIE_HTTPONLY = True  # 是否Session的cookie只支持http传输(默认)
      SESSION_COOKIE_AGE = 1209600  # Session的cookie失效日期(2周)(默认)
      SESSION_EXPIRE_AT_BROWSER_CLOSE = False  # 是否关闭浏览器使得Session过期(默认)
      SESSION_SAVE_EVERY_REQUEST = False  # 是否每次请求都保存Session,默认修改之后才保存(默认)
      View

    认证相关

    登录页地址

    LOGIN_URL = '/login/'  # 这里配置成你项目登录页面的路由

    替换默认auth_user表

    AUTH_USER_MODEL = "app名.User表名"

    跨域配置

    • 安装

      pip install django-cors-headers
    • settings配置

      INSTALLED_APPS = (
          'corsheaders',
      )
      MIDDLEWARE = [
          'corsheaders.middleware.CorsMiddleware',
      ]
      CORS_ORIGIN_WHITELIST = (
          '127.0.0.1:8080',
          'localhost:8080', #凡是出现在白名单中的域名,都可以访问后端接口
      )
      CORS_ALLOW_CREDENTIALS = True  # 指明在跨域访问中,后端是否支持对cookie的操作

    其它

    上传文件

    • 文件上传页面

       1 <!DOCTYPE html>
       2 <html lang="en">
       3 <head>
       4     <meta charset="UTF-8">
       5     <title>文件上传测试</title>
       6 </head>
       7 <body>
       8 <form action="/img_upload/" method="post" enctype="multipart/form-data">
       9     <p>title: <input type="text" name="title"></p>
      10     <p>img: <input type="file" name="file" accept="image/*"></p>
      11     <p><input type="submit" value="submit"></p>
      12     <p><img src="{{ img_link }}"></p>
      13 </form>
      14 </body>
      15 </html>
      /templates/img_upload.html
    • 模型

       1 from django.db import models
       2 
       3 
       4 class Image(models.Model):
       5     title = models.CharField(max_length=100, verbose_name=u'标题')
       6     # upload_to参数可指定文件保存位置 (相对配置中的MEDIA_ROOT对应路径)
       7     image = models.ImageField(upload_to='image/%Y/%m/%d/%H/%M/%S', max_length=400)
       8 
       9     def __str__(self):
      10         return self.title
      /[app name]/models.py
    • 路由

      1 from django.conf.urls import url
      2 from img_upload import views
      3 from django.views.static import serve  # 导入相关静态文件处理的views控制包
      4 from django_test.settings import MEDIA_ROOT  # 导入项目文件夹中setting中的MEDIA_ROOT绝对路径
      5 
      6 urlpatterns = [
      7     url(r'^img_upload/', views.img_upload),
      8     url(r'^media/(?P<path>.*)$', serve, {"document_root": MEDIA_ROOT}),
      9 ]
      /[project name]/urls.py
    • 视图

       1 from django.shortcuts import render
       2 from img_upload import models
       3 
       4 
       5 def img_upload(request):
       6     img_link = ''
       7     if request.method == 'POST':
       8         title = request.POST.get('title')
       9         img_file = request.FILES.get('file')
      10         img_obj = models.Image.objects.create(title=title, image=img_file)
      11         img_link = img_obj.image.url
      12     return render(request, 'img_upload.html', locals())
      /[app name]/views.py
    • 配置

      1 MEDIA_URL = '/media/'
      2 MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
      3 
      4 STATIC_URL = '/static/'
      5 STATICFILES_DIRS = [
      6     os.path.join(BASE_DIR, 'static'),
      7     os.path.join(BASE_DIR, 'media'),
      8 ]
      /[project name]/settings.py
    • 效果

      效果:
      从效果中可以看出,图片在向db保存数据的过程中存储到了模型中指定的位置,而db中保存的只是图片的路径。
  • 相关阅读:
    spring-session+Redis实现Session共享
    SQLServer语法常用总结
    [PDFBox]后台操作pdf的工具类
    类加载器
    SQLServer常用分页方式
    Tesseract识别图片提取文字&字库训练
    AbstractQueuedSynchronizer的简单介绍
    CountDownLatch 闭锁、FutureTask、Semaphore信号量、Barrier栅栏
    Java线程实现的第三种方式Callable方式与结合Future获取返回值
    原子类型的使用&Unsafe&CAS
  • 原文地址:https://www.cnblogs.com/zze46/p/9768771.html
Copyright © 2020-2023  润新知