#python #anaconda #jupyter-notebook #visual-code #html #css #javascript #http

제목에러메시지가 떠야 하는데 redirect문으로 연결2021-03-10 15:44
작성자

안녕하세요. 파이썬 초보입니다.

Django를 통해 웹서버 만드는 공부를 하는 중입니다. 

버전이 달라서 그런지 웹 강사님이 작성해주는 코드랑 완전 동일하게 하고 있는데 오류 페이지가 떠서 질문 드립니다. 달리 질문할 곳을 찾지 못해서 질문 드리니 외면하지 마시고 답변을 부탁 드려요..ㅜㅜ


1. 사용 중인 파이썬 : 3.9.1

2. Django 버전: 3.1.7

3. bootstrap: 현 날짜(21/3/10) 기준 최신 버전이니 5.0.0 인 것 같습니다

4. 가상 환경 사용 중

5. 프로젝트/앱 구성

django (프로젝트명)

> __pycache__

- asgi.py

- settings.py

- urls.py

- wsgi.py

user (앱)

> __pycache__

> migrations

> templates

>> base.html

>> index.html

>> register.html

- __init__.py

- admin.py

- apps.py

- forms.py

- models.py

- tests.py

- views.py



6. 설정값

* django > user > forms.py

from django import forms

class RegisterForm(forms.Form):
    email = forms.EmailField(
        error_messages={
            'required''이메일을 입력해주세요.'
        },
        max_length=64label='이메일'
    )
    password = forms.CharField(
        error_messages={
            'required''비밀번호를 입력해주세요.'
        },
        widget=forms.PasswordInput, label='비밀번호'
    )
    re_password = forms.CharField(
        error_messages={
            'required''비밀번호를 다시 입력해주세요.'
        },
        widget=forms.PasswordInput, label='비밀번호 확인'
    )


def clean(self):
    cleaned_data = super().clean()
    password = cleaned_data.get('password')
    re_password = cleaned_data.get('re_password')

    if password and re_password:
        if password != re_password:
            self.add_error('password''비밀번호가 서로 다릅니다.')
            self.add_error('re_password''비밀번호가 서로 다릅니다.')


* django > user > templates > register.html

{% extends "base.html" %}
{% block contents %}
<div class="row mt-5">
    <div class="col-12 text-center">
        <h1>회원가입</h1>
    </div>
</div>
<div class="row mt-5">
    <div class="col-12">
      {{ error }}
    </div>
</div>
<div class="row mt-5">
    <div class="col-12">
        <form method="POST" action=".">
            {% csrf_token %}
            {% for field in form %}
            <div class="form-label">
                <label for="{{ field.id_for_label }}">{{ field.label }}</label>
                <input type="{{ field.field.widget.input_type }}" class="form-control" id="{{ field.id_for_label }}"
                    placeholder="{{ field.label }}" name="{{ field.name }}" />
            </div>
            {% if field.errors %}
            <span style="color: red">{{ field.errors }}</span>
            {% endif %}
            {% endfor %}
            <button type="submit" class="btn btn-primary">회원가입</button>
        </form>
    </div>
</div>
{% endblock %}


* django > user > templates > base.html

<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1"/>
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BmbxuPwQa2lc/FVzBcNJ7UAyJxM6wuqIj61tLrc4wSX0szH/Ev+nYRRuWlolflfl" crossorigin="anonymous">
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/js/bootstrap.min.js" integrity="sha384-nsg8ua9HAw1y0W1btsyWgBklPnCUAFLuTMS2G72MMONqmOymq585AcH49TLBQObG" crossorigin="anonymous"></script>

    </head>
    <body>
        <div class="container">
            {% block contents %}
            {% endblock %}
        </div>

    </body>
</html>


* django > user > views.py

from django.shortcuts import render
from django.views.generic.edit import FormView
from .forms import RegisterForm

# Create your views here.

def index(request):
    return render(request, 'index.html')


class RegisterView(FormView):
    template_name = 'register.html'
    form_class = RegisterForm


* django > urls.py

from django.contrib import admin
from django.urls import path
from fcuser.views import index, RegisterView

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', index),
    path('register/', RegisterView.as_view()),
]


7. 오류 메시지

register 페이지에서 password와 re_password를 다르게 입력하고 '비밀번호가 서로 다릅니다' 메시지를 보려고 하는데 아래와 같은 창이 뜹니다. 


ImproperlyConfigured at /register/

No URL to redirect to. Provide a success_url.
Request Method:POST
Request URL:http://127.0.0.1:8000/register/
Django Version:3.1.7
Exception Type:ImproperlyConfigured
Exception Value:
No URL to redirect to. Provide a success_url.
Exception Location:C:\Users\USER\Documents\!Programming\Django_실전\django_env\lib\site-packages\django\views\generic\edit.py, line 52, in get_success_url
Python Executable:C:\Users\USER\Documents\!Programming\Django_실전\django_env\Scripts\python.exe
Python Version:3.9.1
Python Path:
['C:\\Users\\USER\\Documents\\!Programming\\Django_실전\\django',
 'C:\\Users\\USER\\AppData\\Local\\Programs\\Python\\Python39\\python39.zip',
 'C:\\Users\\USER\\AppData\\Local\\Programs\\Python\\Python39\\DLLs',
 'C:\\Users\\USER\\AppData\\Local\\Programs\\Python\\Python39\\lib',
 'C:\\Users\\USER\\AppData\\Local\\Programs\\Python\\Python39',
 'C:\\Users\\USER\\Documents\\!Programming\\Django_실전\\django_env',
 'C:\\Users\\USER\\Documents\\!Programming\\Django_실전\\django_env\\lib\\site-packages']
Server time:

Wed, 10 Mar 2021 05:49:43 +0000



왜 설정해준적도 없는 redirect문으로 연결되서 에러 창이 뜨게 되는지 잘 모르겠네요...

토큰링이 제대로 안된 게 아닐까 조심스레 추측 해봅니다..! 

원인 좀 봐주세요 ㅜ 간단한 부분인 것 같은데 안되니까 머리 아프네요


댓글
이전실습자료3 관련 문의2021-03-12
다음실습자료 업로드2021-03-10