[英]django.db.utils.OperationalError: FATAL: role “django” does not exist
[英]django.db.utils.OperationalError: FATAL: role "user" does not exist
我正在尝试使用 django 和 postgresql 对用户进行身份验证。 我的项目是码头化的。 当我运行docker-compose up --build
,我收到一条错误消息:
django.db.utils.OperationalError:致命:角色“django2”不存在
我知道错误说角色 django2 不存在,但确实存在。 如果我运行CREATE ROLE django2;
我收到一条错误ERROR: role "django2" already exists
。
我的settings.py的DATABASE部分:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'zane_db',
'USER': 'django2',
'PASSWORD': 'django2',
'HOST': 'db',
'PORT': 5432
}
}
我的注册视图:
letters = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
numbers = ["1", "2", "3", "4", "5", "6", "7", "8", "9",]
characters = letters + numbers
length = 5
token = "".join(random.sample(characters, length))
def signup(request):
if request.method == "POST":
context = {'has_error': False, 'data': request.POST}
global password
global password2
global email
global username
email = request.POST.get('email')
username = request.POST.get('username')
password = request.POST.get('password')
password2 = request.POST.get('password2')
body = render_to_string('authentication/email/email_body.html', {
'username': username,
'token': token,
})
send_mail(
"Email Confirmation",
body,
'tadejtilinger@gmail.com',
[email]
)
return redirect('email-confirmation')
return render(request, 'authentication/signup.html')
def email_confirmation(request):
if request.method == "POST":
context = {'has_error': False, 'data': request.POST}
code = request.POST.get('code')
if code == token:
if len(password) < 8:
############custom message
context['has_error'] = True
if password != password2:
############custom message
context['has_error'] = True
if not validate_email(email):
############custom message
context['has_error'] = True
if not username:
############custom message
context['has_error'] = True
if models.CustomUser.objects.filter(username=username).exists():
############custom message
context['has_error'] = True
return render(request, 'authentication/signup.html', context, status=409)
if models.CustomUser.objects.filter(email=email).exists():
############custom message
context['has_error'] = True
return render(request, 'authentication/signup.html', context, status=409)
if context['has_error']:
return render(request, 'authentication/signup.html', context)
user = models.CustomUser.objects.create_user(username=username, email=email)
user.set_password(password)
user.save()
user = authenticate(request, username=username, password=password)
login(request)
return render(request, 'authentication/email/email_confirmation.html')
我的 docker-compose.yml
version: '3.8'
services:
web:
tty: true
build: .
command: python3 /docekr/manage.py runserver 0.0.0.0:8000
volumes:
- .:/docekr
ports:
- 8000:8000
depends_on:
- db
db:
image: postgres:11
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- "POSTGRES_HOST_AUTH_METHOD=trust"
volumes:
postgres_data:
我的 Dockerfile:
FROM python:3.9
ENV PYTHONUBBUFFERED 1
ENV PYTHONDONTWRITEBYTECODE 1
WORKDIR /zane
COPY Pipfile Pipfile.lock /zane/
RUN pip3 install pipenv && pipenv install --system
COPY . /zane/
您需要为您的数据库设置POSTGRES_USER
和POSTGRES_PASSWORD
。 将您的 docker-compose 条目更改为此。
db:
image: postgres:11
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
POSTGRES_HOST_AUTH_METHOD: trust
POSTGRES_USER: django2
POSTGRES_PASSWORD: django2
ports:
- "5432:5432"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.