【问题标题】:How to solve a post request error on django如何解决 django 上的 post 请求错误
【发布时间】:2021-07-28 05:44:02
【问题描述】:

我在 django 上遇到了某些发布请求错误。当我点击 form submit button 时弹出错误,指出 django 找不到我要的页面。请我想知道我哪里弄错了,因为我还是 django 的初学者。

def account_register(request):
 #   if request.user.is_authenticated:
 #       return redirect('account:dashboard')

    if request.method == 'POST':
        registerForm = RegistrationForm(request.POST)
        if registerForm.is_valid():
            user = registerForm.save(commit=False)
            user.email = registerForm.cleaned_data['email']
            user.set_password(registerForm.cleaned_data['password'])
            user.is_active = False
            user.save()
            current_site = get_current_site(request)
            subject = 'Activate your Account'
            message = render_to_string('account/registration/account_activation_email.html', {
                'user': user,
                'domain': current_site.domain,
                'uid': urlsafe_base64_encode(force_bytes(user.pk)),
                'token': account_activation_token.make_token(user),
            })
            user.email_user(subject=subject, message=message)
            return HttpResponse('registered succesfully and activation sent')
    else:
        registerForm = RegistrationForm()
    return render(request, 'account/registration/register.html', {'form': registerForm})
urlpatterns = [
    path('account/register', views.account_register, name='register'),
    path('activate/<slug:uidb64>/<slug:token>)/', views.account_activate, name='activate')
]

urls.py(主要的 django 应用程序)

urlpatterns = [
    path('', include('account.urls', namespace='account')),
]

views.py

def account_register(request):
    if request.method == 'POST':
        registerForm = RegistrationForm(request.POST)
        if registerForm.is_valid():
            user = registerForm.save(commit=False)
            user.email = registerForm.cleaned_data['email']
            user.set_password(registerForm.cleaned_data['password'])
            user.is_active = False
            user.save()
            current_site = get_current_site(request)
            subject = 'Activate your Account'
            message = render_to_string('account/registration/account_activation_email.html', {
                'user': user,
                'domain': current_site.domain,
                'uid': urlsafe_base64_encode(force_bytes(user.pk)),
                'token': account_activation_token.make_token(user),
            })
            user.email_user(subject=subject, message=message)
            return HttpResponse('registered succesfully and activation sent')
    else:
        registerForm = RegistrationForm()
    return render(request, 'account/registration/register.html', {'form': registerForm})

模板

account_activation_email.html
{% autoescape off %}
Hi {{ user.user_name }},

Your account has successfully created

http://{{ domain }}{% url 'account:activate' uidb64=uid token=token %}
{% endautoescape %}

account/registration/register.html

<form class="account-form p-4 rounded col-lg-10 mx-auto" action="." method="post">
                                {% csrf_token %}
                                {% if form.errors %}
                                <p>Please correct the following errors:</p>
                                {% for field in form %}
                                {% if field.errors %}
                                <div class="alert alert-primary" role="alert">
                                    {{ field.label }}: {{ field.errors|striptags }}
                                </div>
                                {% endif %}
                                {% endfor %}
                                {% endif %}

                                <label>{{ form.user_name.label }}<span class="text-muted small">
                                        (Required)</span></label>
                                {{ form.user_name }}
                                <label>{{ form.email.label}}<span class="text-muted small">
                                        (Required)</span></label>
                                {{ form.email }}
                                <label>{{ form.password.label}}<span class="text-muted mb-4">
                                        </span></label>
                                 <small class="form-text text-muted mb-4 small">
                                    At least 8 characters and 1 digit
                                </small>
                                {{ form.password }}
                                <label>{{ form.password2.label}}<span class="text-muted small">
                                        (Required)</span></label>
                                {{ form.password2 }}
                                <button class="btn btn-primary btn-block py-2 mb-4 mt-5 fw500 w-100" type="submit">Register</button>
                                <p class="text-center">
                                    <a>Already have an account?</a>
                                </p>
                            </form>

【问题讨论】:

  • 更新问题以包含 html 模板内容以及 Django 错误页面。
  • 我已经添加了模板,但是在上传图片时遇到了一些挑战。但是,当我单击注册表单的提交按钮时,如果它成功,它应该发送一个 HttpResponse,就像在 views.py 中指定的那样。在项目中,Django遍历url并告诉我The current path, account/, didn’t match any of these(即我在urls.py中指定的任何url,但如果注册成功,我应该得到一个HttpResponse发送回浏览器而不是渲染模板)
  • 能否请您出示您的account/registration/register.html 模板?
  • @GwynBleidD2,我已经添加了注册模板

标签: python html django django-templates


【解决方案1】:

您的网址格式如下:

'account/register'

接下来,您的表单标签的 action 属性为:

action="."

动作属性. 是什么意思?好吧,这意味着使用当前目录作为此表单的操作 url。这里的当前目录是什么?好吧,既然你的 url 是 /account/register 并且它没有尾部斜杠,可以说 register 是一个文件,/account/ 是当前目录,这是你的表单被提交的地方,你会得到一个错误。

简单的解决方法是在 url 模式中添加一个斜杠:

path('account/register/', views.account_register, name='register'),

另外还放弃了表单标签上的 action 属性,因为这意味着 action url 是当前页面(而不是当前目录):

<form class="account-form p-4 rounded col-lg-10 mx-auto" method="post">

【讨论】:

    猜你喜欢
    • 2018-11-02
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 2018-04-27
    • 1970-01-01
    • 2019-06-14
    相关资源
    最近更新 更多