django-settings

  • 项目其他处引入settings.py中变量:django.conf.settings.{param_name},django.conf.settings是一个对象

  • 多数据库管理

    • settings.py中:

      DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.mysql',
              'NAME': 'admin',
              "PASSWORD": "admin",
              "USER": "admin",
              "HOST": "127.0.0.1",
              "PORT": 3306,
          },
          'stock': {
              'ENGINE': 'django.db.backends.mysql',
              'NAME': 'stock',
              "PASSWORD": "admin",
              "USER": "admin",
              "HOST": "127.0.0.1",
              "PORT": 3306,
          }
      }
      
    • 访问多数据库(二选一,也可混着用):

      • 使用router指定访问某个app指向某个标签下的数据库,settings中参数为DATABASE_ROUTERS=[‘stocktradeweb.routers.SessionRouter’] (stocktradeweb为根目录),类SessionRouter主要重写db_for_read,db_for_write,allow_relation(跨表外键关联需要),allow_migrate

        class SessionRouter:
            """
            A router to control all database operations on models in the
            sessions application.
            """
            def db_for_read(self, model, **hints):
                if model._meta.app_label == 'sessions':
                    return 'sessions'
                return None
        
            def db_for_write(self, model, **hints):
                if model._meta.app_label == 'sessions':
                    return 'sessions'
                return None
        
            def allow_relation(self, obj1, obj2, **hints):
                """
                Allow relations if a model in the auth app is involved.
                """
                if obj1._meta.app_label == 'sessions' or obj2._meta.app_label == 'sessions':
                    return True
                return None
        
            def allow_migrate(self, db, app_label, model_name=None, **hints):
                if app_label == 'sessions':
                    return db == 'sessions'
                return None
        
      • model对象在filter的时候,使用using函数,using(‘tab’)会指向对应标签的数据库,save的时候使用参数,save(using=‘tab’),且在admin页面重写方法,主要有save_model、delete_model、get_queryset、formfield_for_foreignkey、formfield_for_manytomany方法,都要加上using字段

        class ModelAdminUsing(admin.ModelAdmin):
            list_per_page = 10
        
            # A handy constant for the name of the alternate database.
            using = 'default'
        
            def save_model(self, request, obj, form, change):
                # Tell Django to save objects to the 'other' database.
                obj.save(using=self.using)
        
            def delete_model(self, request, obj):
                # Tell Django to delete objects from the 'other' database
                obj.delete(using=self.using)
        
            def get_queryset(self, request):
                # Tell Django to look for objects on the 'other' database.
                return super(ModelAdminUsing, self).get_queryset(request).using(self.using)
        
            def formfield_for_foreignkey(self, db_field, request, **kwargs):
                # Tell Django to populate ForeignKey widgets using a query
                # on the 'other' database.
                return super(ModelAdminUsing, self).formfield_for_foreignkey(db_field, request, using=self.using, **kwargs)
        
            def formfield_for_manytomany(self, db_field, request, **kwargs):
                # Tell Django to populate ManyToMany widgets using a query
                # on the 'other' database.
                return super(ModelAdminUsing, self).formfield_for_manytomany(db_field, request, using=self.using, **kwargs)
        
  • 访问模板文件

    • settings.py中

      TEMPLATES = [
          {
              'BACKEND': 'django.template.backends.django.DjangoTemplates',
              'DIRS': [os.path.join(BASE_DIR, "templates")],  # 指定公共文件的路径
              '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',
                  ],
              },
          },
      ]
      # 在单个app中访问指定模板文件时候,可以直接写文件名,django服务器会在该views文件所在层的templates中寻找
      
  • 访问静态文件,将静态文件收集到项目下公共目录

    • settings.py中

      STATIC_URL = '/static/' # 访问路径
      STATIC_ROOT = os.path.join(BASE_DIR, 'static')  # 部署静态文件时聚合的目录,需要绝对路径
      # STATICFILES_DIRS = (
      #     os.path.join(BASE_DIR, 'static'),
      # )
      # STATICFILES_DIRS在debug==Ture的时候发挥作用,指定除了各个app外的公共静态目录
      
    • urls.py中

      kwargs = dict(
          document_root=django.conf.settings.STATIC_ROOT
      )
      prefix = django.conf.settings.STATIC_URL
      urlpatterns += [
          django.urls.re_path(r'^%s(?P<path>.*)$' % re.escape(prefix.lstrip('/')), django.views.static.serve, kwargs=kwargs),
      ]
      
  • 访问文件,类似访问静态资源

    • settings.py中

      MEDIA_URL = '/uploads/'
      MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads')
      
    • urls.py中,也可另外写做上传和下载文件功能的url

      urlpatterns += [
          django.urls.re_path(r'^uploads/(?P<path>.*)$', django.views.static.serve, {'document_root': django.conf.settings.MEDIA_ROOT}),
      ]
      
  • 使用中文,日期格式化

    • settings.py中

      LANGUAGE_CODE = 'zh-hans'
      TIME_ZONE = 'Asia/Shanghai'
      # 日期格式化,注意分钟和秒的字符
      DATETIME_FORMAT = 'm-d H:i:s'
      DATE_FORMAT = 'Y-m-d'
      
  • 设置admin网站名和导航名

    • settings.py中

      MY_SITE_HEADER = '量化交易平台'  # admin页面导航页上显示的字符串
      MY_SITE_TITLE = '股票-量化'  # 网站名,浏览器打开链接显示的字符串
      
    • urls.py中

      django.contrib.admin.site.site_header = django.conf.settings.MY_SITE_HEADER
      django.contrib.admin.site.site_title = django.conf.settings.MY_SITE_TITLE
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值