为django设置助手,以通过单个字符串表示数据库、缓存和电子邮件设置
django-service-urls的Python项目详细描述
django服务url
django-service-urls
是django通过单个字符串表示数据库、缓存和电子邮件设置的设置助手。
这项工作基于dj-database-url和https://github.com/django/django/pull/8562。
示例
原始配置:
DATABASES={'default':{'ENGINE':'django.db.backends.postgresql','NAME':'mydb','HOST':'localhost','PORT':5432,'USER':'myuser','PASSWORD':'mypasswd',},}CACHES={'default':{'BACKEND':'django.core.cache.backends.memcached.MemcachedCache','LOCATION':'127.0.0.1:11211',},}EMAIL_BACKEND='django.core.mail.backends.smtp.EmailBackend'HOST='localhost'PORT=2525HOST_USER=''HOST_PASSWORD=''USE_TLS=TrueUSE_SSL=FalseSSL_CERTFILE='/etc/ssl/cert'SSL_KEYFILE='/etc/ssl/key'TIMEOUT=600USE_LOCALTIME=False
替换为:
DATABASES={'default':os.environ.get('DATABASE_DEFAULT','postgres://myuser:mypasswd@localhost:5432/mydb'),}CACHES={'default':os.environ.get('CACHE_DEFAULT','memcached://127.0.0.1:11211'),}EMAIL_BACKEND=os.environ.get('EMAIL_BACKEND','smtps://localhost:2525?ssl_certfile=/etc/ssl/cert&ssl_keyfile=/etc/ssl/key&timeout=600')
后端
目前django-service-urls
支持三种不同的服务:
数据库(service_urls.db
)
Service | Backend | URLString |
---|---|---|
Postgresql | django.db.backends.postgresql | postgres://user:passws@host:port/db |
Postgresql Socket | django.db.backends.postgresql | postgres://%2Fvar%2Frun%2Fpostgresql/db |
Postgresql (dj-database-url compat alias) | django.db.backends.postgresql | postgresql://user:passwd@host:port/db |
Postgresql (dj-database-url compat alias) | django.db.backends.postgresql | pgsql://user:passwd@host:port/db |
Postgis | django.contrib.gis.db.backends.postgis | postgis://user:passwd@host:port/db |
Sqlite (memory) | django.db.backends.sqlite3 | sqlite://:memory: or sqlite:// |
Sqlite (file) | django.db.backends.sqlite3 | sqlite:///var/db/database.db |
Spatialite (memory) | django.contrib.gis.db.backends.spatialite | spatialite://:memory: or spatialite:// |
Spatialite (file) | django.contrib.gis.db.backends.spatialite | spatialite:///var/db/database.db |
Mysql | django.db.backends.mysql | mysql://user:passwd@host:port/db |
Mysql + GIS | django.contrib.gis.db.backends.mysql | mysql+gis://user:passwd@host:port/db |
Oracle | django.db.backends.oracle | oracle://user:passwd@host:port/db |
Oracle + GIS | django.contrib.gis.db.backends.oracle | oracle+gis://user:passwd@host:port/db |
缓存(service_urls.cache
)
Service | Backend | URLString |
---|---|---|
Memory | django.core.cache.backends.locmem.LocMemCache | memory:// |
Memory | django.core.cache.backends.locmem.LocMemCache | memory://abc |
Database | django.core.cache.backends.db.DatabaseCache | db://table-name |
Dummy | django.core.cache.backends.dummy.DummyCache | dummy:// |
Dummy | django.core.cache.backends.dummy.DummyCache | dummy://abc |
Memcached: single ip | django.core.cache.backends.memcached.MemcachedCache | memcached://1.2.3.4:1567 |
Memcached+PyLibMCCache: single ip | django.core.cache.backends.memcached.PyLibMCCache | memcached+pylibmccache://1.2.3.4:1567 |
Memcached multiple ips | django.core.cache.backends.memcached.MemcachedCache | memcached://1.2.3.4:1567,1.2.3.5:1568 |
Memcached+PyLibMCCache multiple ips | django.core.cache.backends.memcached.PyLibMCCache | memcached+pylibmccache://1.2.3.4:1567,1.2.3.5:1568 |
Memcached no port | django.core.cache.backends.memcached.MemcachedCache | memcached://1.2.3.4 |
Memcached+PyLibMCCache no port | django.core.cache.backends.memcached.PyLibMCCache | memcached+pylibmccache://1.2.3.4 |
Memcached unix socket | django.core.cache.backends.memcached.MemcachedCache | memcached:///tmp/memcached.sock |
Memcached+PyLibMCCache unix socket | django.core.cache.backends.memcached.PyLibMCCache | memcached+pylibmccache:///tmp/memcached.sock |
File | django.core.cache.backends.filebased.FileBasedCache | file://C:/abc/def/xyz |
File | django.core.cache.backends.filebased.FileBasedCache | file:///abc/def/xyz |
电子邮件(service_urls.email
)
Service | Backend | URLString |
---|---|---|
Console | django.core.mail.backends.console.EmailBackend | console:// |
SMTP | django.core.mail.backends.smtp.EmailBackend | smtp://localhost:25 |
SMTPS (smtp+tls alias) | django.core.mail.backends.smtp.EmailBackend | smtps://localhost:465 |
SMTP+TLS | django.core.mail.backends.smtp.EmailBackend | smtp+tls://localhost:465 |
SMTP+SSL | django.core.mail.backends.smtp.EmailBackend | smtp+ssl://localhost:587 |
File | django.core.mail.backends.filebased.EmailBackend | file:///var/log/emails |
Memory | django.core.mail.backends.locmem.EmailBackend | memory:// |
Dummy | django.core.mail.backends.dummy.EmailBackend | dummy:// |
安装
安装软件包
$ python3 -m pip install django-service-urls
在manage.py
中添加import service_urls.patch
#!/usr/bin/env pythonimportosimportsysimportservice_urls.patchdefmain():os.environ.setdefault('DJANGO_SETTINGS_MODULE','project_name.settings')try:fromdjango.core.managementimportexecute_from_command_lineexceptImportErrorasexc:raiseImportError("Couldn't import Django. Are you sure it's installed and ""available on your PYTHONPATH environment variable? Did you ""forget to activate a virtual environment?")fromexcexecute_from_command_line(sys.argv)if__name__=='__main__':main()
在wsgi.py
importosimportservice_urls.patchfromdjango.core.wsgiimportget_wsgi_applicationos.environ.setdefault('DJANGO_SETTINGS_MODULE','project_name.settings')application=get_wsgi_application()
扩展django-service-urls
添加另一个处理程序
可以将另一个处理程序添加到已经存在的处理程序:
my_postgres_backend/service_url.py
fromservice_urls.servicesimportdb,postgresql_config_from_url# postgresql forkpostgresql_config_from_url=db.register(('mypgbackend','my_postgres_backend'))(postgresql_config_from_url)
yourapp/settings.py
importmy_postgres_backend.service_urlDATABASES={'default':'mypgbackend://user:pwd@:/mydb'}
添加其他服务
fromservice_urlsimportServiceclassSearchService(Service):defconfig_from_url(self,engine,scheme,url):parsed=self.parse_url(url)return{'ENGINE':engine,# here all options from parsed}search=SearchService()@search.register(('myengine','my_search_engine'))defsearch_config_from_url(backend,engine,scheme,url):returnbackend.config_from_url(engine,scheme,url)
更改
1.2.0
- 使用django<;2.2
- 在django>;1.11下更正设置操作(即:运行覆盖值的测试时)
- 添加django 2.2支持
1.1.1
- 正确的sqlite解析器
1.1.0
- 将助手添加到monkey patch django设置中
- 文档清理
1.0.2
- 修复setup.py和manifest.in
1.0.1
- 修复自述文件错误
1.0.0
- 添加
service_urls.db
服务和默认解析器 - 添加
service_urls.cache
服务和默认解析器 - 添加
service_urls.email
服务和默认解析器