0

「存在しない」URLを表示できるという問題があります。たとえば、/ myapp / loginのURLにアクセスすると、機能します。次に、/ myapp / login / loginに移動しますが、それでも機能します。次に、/ myapp / insertrandomcharactershere / loginに移動しますが、それでも機能します。これは、/ myapp /のサブパスにあるすべてのURLで機能するため、/ myapp / register、/ myapp / login、および/ myapp/myaccountです。私のurlconfの名前で終わっている限り、それは機能するようです。この問題を修正できなかったため、ログインページとurlconfsから、問題が含まれているはずのコードを追加しています。

/ myapp /、/ myapp / login /、/ myapp / register /、/ myapp /myaccount/以外のものは404にする必要があります

http://paste.pound-python.org/show/31613/

#django/urls.py
urlpatterns = patterns('',
    url(r'myapp/', include('myapp.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

#myapp/urls.py
urlpatterns = patterns('myapp.views',
    url(r'^$', 'index', name='index'),
    url(r'register/$', 'register', name='register'),
    url(r'myaccount/$', 'myaccount', name='myaccount'),
    url(r'login/$', 'login_page', name='login'),
    url(r'logout/$', 'logout_user', name='logout')
)

#myapp/login.py
def login_page(request):
    if request.user.is_authenticated():
        return HttpResponseRedirect(reverse('index'))
    form = LoginForm(request.POST or None)
    if form.is_valid():
        username = form.cleaned_data['username']
        username = username.capitalize()
        password = form.cleaned_data['password']
        try:
            User.objects.get(username=username)
        except:
            return render(request, 'myapp/login.html', {
                'form': form,
                'error': "Account doesn't exist"
                })
        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                login(request, user)
                return HttpResponseRedirect(reverse('index'))
            else:
                return render(request, 'myapp/login.html', {
                    'form': form,
                    'error': 'Account is disabled or banned',
                    })
        else:
            return render(request, 'myapp/login.html', {
                'form': form,
                'form': 'Authentication Error!'
                })
    return render(request, 'myapp/login.html', {
        'form': form,
        })

{% if not user.is_authenticated %}

#myapp/templates/myapp/login.html
<strong>Login</strong>
<form action='{% url 'login' %}' method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Login">
</form>
{{ error }}
{% endif %}
4

3 に答える 3

5

^URLに欠落していると思います:

次の行:

url(r'login/$', 'login_page', name='login'),

する必要があります:

url(r'^login/$', 'login_page', name='login'),
于 2013-03-25T04:39:39.423 に答える
0

最初に使用する文字列で始まることをURLで指定する必要があります'^'

したがって、urls.py行を更新できます

url(r'myapp/', include('myapp.urls')),

url(r'^myapp/', include('myapp.urls')),

内の他のURLに対してこれを実行することをお勧めしますmyapp.urls

于 2013-03-25T04:40:10.363 に答える
0

パターンの開始を「^」でマークする必要があります。

元:

urlpatterns = patterns('',
    url(r'^myapp/', include('myapp.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

#myapp/urls.py
urlpatterns = patterns('myapp.views',
    url(r'^$', 'index', name='index'),
    url(r'^register/$', 'register', name='register'),
    url(r'^myaccount/$', 'myaccount', name='myaccount'),
    url(r'^login/$', 'login_page', name='login'),
    url(r'^logout/$', 'logout_user', name='logout')
)
于 2013-03-25T04:44:13.240 に答える