我有几个自定义的 django 设置,这基本上是我的项目结构:
MainProject/
manage.py
my_project/
settings/
base.py
dev.py
prod.py
Run Code Online (Sandbox Code Playgroud)
__init__.py我在目录中创建了文件以将它们标识为包。
我已将其导出DJANGO_SETTINGS_MODULE为指向所选的设置文件。
该manage.py命令似乎处理得很好,我从来没有遇到过问题。
问题是无论我做什么都找不到任何设置文件。我已经尝试了几种可能的解决方案,但到目前为止似乎没有任何效果。django-admin.py
--settings=my_project.settings.dev manage.py让它指向 dev.py 文件settings中创建了一个文件(依次导入 base.py)。MainProjectmy_projectsettings文件,让 Django 知道它应该使用哪些文件settings这是关于第4点:
from django.core.management import setup_environ
try:
import my_project.settings.dev as settings
except ImportError:
import sys
sys.stderr.write("Couldn't find the settings.py module.")
sys.exit(1)
setup_environ(settings)
Run Code Online (Sandbox Code Playgroud)
到目前为止似乎没有任何效果。
=====================================
解决方案:
我没有找到确切的解决方案,但由于对所选答案的评论,我了解到您基本上可以用于manage.py您可以在 中执行的所有操作django-admin.py,我不知道!因为事情确实对我有用,所以manage.py我对此很满意。
我的settings.py中有这段代码..
EMAIL_HOST = 'smtp.sendgrid.net'
EMAIL_HOST_USER = os.environ.get('EMAIL_HOST_USER')
EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_HOST_PASSWORD')
Run Code Online (Sandbox Code Playgroud)
我尝试在heroku bash中使用它设置环境变量
export EMAIL_HOST_USER=xxx
Run Code Online (Sandbox Code Playgroud)
并且
heroku config:set EMAIL_HOST_USER=xxx
Run Code Online (Sandbox Code Playgroud)
这两种方法都不适合我。如何在heroku中设置环境变量?
我有一个与项目目录处于同一级别的模板目录,因此我放入了 settings.py
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
Run Code Online (Sandbox Code Playgroud)
但 Django 不会在应用程序中搜索模板,它会在 DIRS 处停止
所有需要的应用程序均已安装
2019 年 4 月 8 日更新
\n\n这是 django<=2.2 的一个已知错误,自此PR起已修复
\n\n===================================
\n\n(我们假设mysql后端)
\n\n我可以在 中设置TIME_ZONE多次settings.py,一次用于全局 django 应用程序,一次用于每个数据库(请参阅https://docs.djangoproject.com/en/1.11/ref/settings/#time-zone (ref1))
典型用法是用于日期时间不以 UTC 存储的旧数据库。
\n\n查询我的数据库会考虑此设置,例如:
\n\n在settings.py
USE_TZ = True\nTIME_ZONE = \'Europe/Paris\' # tz1\nDATABASES = {\n \'legacy\': {\n \'ENGINE\': \'django.db.backends.mysql\',\n \'OPTIONS\': {\n \'read_default_file\': \'....cnf\',\n },\n \'TIME_ZONE\': \'Europe/Paris\', # tz2\n },\n \'default\' : {\n \'ENGINE\': \'django.db.backends.mysql\',\n \'OPTIONS\': {\n \'read_default_file\': \'....cnf\',\n },\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n在里面manage.py shell
>>> dt = …Run Code Online (Sandbox Code Playgroud) 有没有办法明确告诉 Django 在发送电子邮件时不要通过邮件服务器进行身份验证。
我目前在 settings.py 中使用以下设置来发送电子邮件。
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'my-mail-server'
EMAIL_PORT = 25
Run Code Online (Sandbox Code Playgroud)
请注意,我没有EMAIL_HOST_USER并且EMAIL_HOST_PASSWORD我正在使用的 smtp 邮件服务器不需要客户端进行身份验证
编辑:当我使用这些设置时,我收到此错误
smtp.SMTPSenderRefused: Client was not authenticated
Run Code Online (Sandbox Code Playgroud) 我想在 django API 中使用 allauth,但是当我安装它时,我遇到了一些错误,我通过 django.setup() 修复了它,之后,我收到错误,告诉我必须设置 DJANGO_SETTINGS_MODULE 现在我在管理中进行了设置。 py:
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
import django
def main():
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'website.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"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?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
os.environ['DJANGO_SETTINGS_MODULE'] = 'website.settings'
django.setup()
main()
Run Code Online (Sandbox Code Playgroud)
但我得到了这个回溯:
Traceback (most …Run Code Online (Sandbox Code Playgroud) 我看过几篇文章并阅读了有关如何在 settings.py 中进行设置的最佳实践的文档AUTH_USER_MODEL,但没有看到任何有关如何执行此操作的实际示例。我尝试了几种配置,但不断收到此错误:
django.core.exceptions.ImproperlyConfigured:AUTH_USER_MODEL 指的是尚未安装的模型“auth.User”
它甚至没有告诉我错误发生在哪里。以下是我尝试过的方法:
方法一:
from django.contrib.auth import get_user_model
User = get_user_model()
Run Code Online (Sandbox Code Playgroud)
然后我会像这样引用我的用户:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)
方法二:
from django.contrib.auth.models import User
Run Code Online (Sandbox Code Playgroud)
两者都不起作用,而且我不确定如果我只想使用标准用户模型,AUTH_USER_MODEL我将如何在 settings.py 中设置。我根本没有自定义 User 对象。我假设类似,但我不确定。AUTH_USER_MODEL = 'django.contrib.auth.models.User'
现在我得到了这个:
AttributeError:“str”对象没有属性“_meta”
用户/表单.py
from django import forms
from django.conf import settings
from django.contrib.auth.forms import UserCreationForm
from .models import Profile
class UserRegisterForm(UserCreationForm):
email = forms.EmailField()
class Meta:
model = settings.AUTH_USER_MODEL
fields = ['username', 'email', 'password1', 'password2']
class UserUpdateForm(forms.ModelForm):
email = forms.EmailField() …Run Code Online (Sandbox Code Playgroud) 运行后,django-admin.py startproject foobar它会创建一个父foobar目录和另一个foobar(同名)文件夹以及该manage.py文件.问题是 - 我应该将所有文件/foobar/foobar移入/foobar,只删除冗余目录?这个结构首先出现的原因是什么?
在我的settings.py中,我有以下日志配置.如果出现错误,我会收到来自root @ localhost的电子邮件.我的问题是我有几个项目,并希望所有错误消息发送到同一个电子邮件地址.但现在非常讨厌识别错误发生在哪个站点上,所以我想将root @ localhost中的发件人电子邮件地址替换为error@project-site.tld.这可能还是我要创建一些虚拟邮箱?
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'mail_admins': {
'level': 'DEBUG',
'class': 'django.utils.log.AdminEmailHandler'
},
'logfile': {
'class': 'logging.handlers.WatchedFileHandler',
'filename': '/var/log/django/proj_name.log'
},
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'DEBUG',
'propagate': True,
},
'django': {
'handlers': ['logfile'],
'level': 'DEBUG',
'propagate': False,
},
}
}
Run Code Online (Sandbox Code Playgroud) 这很简单,但似乎没有提供。
基本上,如果我的网站是...
或非root用户安装
...我想django会知道这一点,并在模板中有一个常量。
我发现的解决方案涉及:
SITE_URL ={{ SITE_URL }}或其他方式在模板中访问它。不是很干
听起来不错,但是django不提供{{ GET_ME_THE_ROOT_URL }}参考吗?
抱歉,django已经训练我期待这样的好吃的东西。
只是说'如果我正在写一个框架,那是我要做的第一件事,除了在我的桌子旁边放一个小冰箱,里面装满了热钱包,还有一个微波炉,但距离很近但很安全。
django ×10
django-settings ×10
python ×5
django-1.11 ×1
django-admin ×1
django-email ×1
email ×1
heroku ×1
logging ×1
smtp ×1