Django.db.utils.OperationalError: FATAL: роль "user" не существует
Я пытаюсь аутентифицировать пользователей с помощью django и postgresql. Мой проект докеризирован. Когда я запускаю docker-compose up --build
, я получаю ошибку, говорящую:
django.db.utils.OperationalError: FATAL: роль "django2" не существует
.
Я знаю, что ошибка говорит, что роль django2 не существует, но она существует. Если я запускаю CREATE ROLE django2;
я получаю ошибку, говорящую ERROR: role "django2" already exists
.
Мой раздел DATABASE в settings.py:
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')
вам нужно установить 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"