-
项目其他处引入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
-
django-settings
最新推荐文章于 2024-07-17 11:32:34 发布