【问题标题】:Path issues in djangodjango中的路径问题
【发布时间】:2021-08-28 22:23:41
【问题描述】:

我面临一个路径问题,在单击 /login/ 路径中的“登录”按钮后,它会寻找 /login/login/ ,而在单击“登录”按钮后,我想将其返回到我的根路径。

我附上了代码和快照的sn-ps,如果有人提出解决方案,请帮忙。

“signup.html 文件”

<form action="signup/" method="post">
                    {% csrf_token %}
                    <input class="text" type="text" name="username" placeholder="Username" required="">
                    <input class="text email" type="email" name="email" placeholder="Email" required="">
                    <input class="text" type="password" name="password1" placeholder="Password" required="">
                    <input class="text w3lpass" type="password" name="password2" placeholder="Confirm Password" required="">
                    <input class="text" type="text" name="address" placeholder="Address" required="">
                    <!-- <div class="wthree-text">
                        <label class="anim">
                            <input type="checkbox" class="checkbox" required="">
                            <span>I Agree To The Terms & Conditions</span>
                        </label>
                        <div class="clear"> </div>
                    </div> -->
                    <input type="submit" value="SIGNUP">
                </form>

“login.html 文件”

<form action="login/" method="post">
                    {% csrf_token %}
                    <input class="text" type="text" name="username" placeholder="Username" required="">
                    <input class="text" type="password" name="password" placeholder="Password" required="">
        

                    <input type="submit" value="LOGIN">
</form>

“urls.py 文件”

urlpatterns = [
    path('',views.signup, name='signup'),
    path('signup/',views.signup,name='signup'),
    path('login/',views.login,name='login'),

]

“views.py 文件”

from django.shortcuts import render,redirect
from django.http import HttpResponse
from .models import SignUp
from django.contrib.auth.models import auth

# Create your views here.

def login(request):
    if request.method == 'POST':
        username= request.POST['username']
        password= request.POST['password']

        user = auth.authenticate(username=username,password=password)

        if user is not None:
            auth.login(request,user)
            return redirect('')
    else:

        return render(request,'login.html')

def signup(request):

    if request.method == 'POST':
        username= request.POST['username']
        email= request.POST['email']
        password1= request.POST['password1']
        password2= request.POST['password2']
        address= request.POST['address']
        html = "<html><body>Confirm Password and Password should be same </body></html>"
        html1= "<html><body>User Already present </body></html>"

        if password1 != password2:
            return HttpResponse(html)
        else:
            for instance in SignUp.objects.all():
                if (instance.username == username) or (instance.email==email):
                    return HttpResponse(html1)
            signup=SignUp(username=username,email=email,password=password1,address=address)
            signup.save()

            return redirect('login')

    else:

        return render(request,'signup.html')

我得到的错误:

Error

【问题讨论】:

    标签: python django authentication django-views django-urls


    【解决方案1】:

    您在表单action 字段中使用相对路径。而不是action="login/" 使用action="/login/"

    如果没有这个,浏览器会将操作路径附加到当前页面路径。因此,如果您在/login,并且登录表单提交,浏览器会将其发送到/login/login/

    另外,由于 GET 和 POST 页面使用相同的路径,您可以完全省略操作字段。浏览器会自动将请求提交到当前路径。

    【讨论】:

    • 这次它没有去 /login/login/ 而是给出了一个错误:“ValueError at /login/ The view signup.views.login没有返回一个HttpResponse对象。它返回了None而是。”
    【解决方案2】:

    试试这个。

    login.html

    <form action="{% url 'login' %}" method="post">
                            {% csrf_token %}
                            <input class="text" type="text" name="username" placeholder="Username" required="">
                            <input class="text" type="password" name="password" placeholder="Password" required="">
                
        
                            <input type="submit" value="LOGIN">
        </form>
    

    signup.html

    <form action="{% url 'signup' %}" method="post">
                        {% csrf_token %}
                        <input class="text" type="text" name="username" placeholder="Username" required="">
                        <input class="text email" type="email" name="email" placeholder="Email" required="">
                        <input class="text" type="password" name="password1" placeholder="Password" required="">
                        <input class="text w3lpass" type="password" name="password2" placeholder="Confirm Password" required="">
                        <input class="text" type="text" name="address" placeholder="Address" required="">
                        <!-- <div class="wthree-text">
                            <label class="anim">
                                <input type="checkbox" class="checkbox" required="">
                                <span>I Agree To The Terms & Conditions</span>
                            </label>
                            <div class="clear"> </div>
                        </div> -->
                        <input type="submit" value="SIGNUP">
                    </form>
    

    【讨论】:

    • 这次它没有去 /login/login/ 而是给出了一个错误:“ValueError at /login/ The view signup.views.login没有返回一个HttpResponse对象。它返回了None而是。”
    • 您是否在 urls.py 中的 urlpatters 之前写了任何 app_name?像这样 app_name = 'signup'
    • from django.urls import path from . import views urlpatterns = [ path('',views.signup, name='signup'), path('signup/',views.signup,name='signup'), path('login/',views.login,name='login'), ]我的url.py文件
    • 你的应用名称是什么?
    • "signup" 是我的应用名称,上面的 urls.py 在注册应用中
    【解决方案3】:

    一开始最好使用 URL 的反向解析使 html 文件中的所有路径动态化

    “urls.py 文件”

    urlpatterns = [
        path('',views.signup, name='signup'),
        path('signup/',views.signup,name='signup'),
        path('login/',views.login,name='login'),
    
    ]
    

    signup.html

    <form action="{% url 'signup' %}" method="post">
                        {% csrf_token %}
    ....
    </form>
    

    Doc..Django Reverse resolution of URLs

    【讨论】:

      猜你喜欢
      • 2011-04-10
      • 2011-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      • 2021-11-28
      • 2021-01-08
      • 1970-01-01
      相关资源
      最近更新 更多