繁体   English   中英

django.db.utils.OperationalError:致命:角色“用户”不存在

[英]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_USERPOSTGRES_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM