how can i login with local url in Django administration and add user?

Viewed 49

i tried for make a django userprofile but i can't Enter to login page there is my error when i enter to my local url

TypeError at /account/login/
__init__() takes 1 positional argument but 2 were given
Request Method: GET
Request URL:    http://127.0.0.1:8000/account/login/
Django Version: 3.2.9
Exception Type: TypeError
Exception Value:    
__init__() takes 1 positional argument but 2 were given
Exception Location: /home/pantea/.local/lib/python3.6/site-packages/django/core/handlers/base.py, line 181, in _get_response
Python Executable:  /usr/bin/python3
Python Version: 3.6.9
Python Path:    
['/home/pantea/tutorial',
 '/usr/lib/python36.zip',
 '/usr/lib/python3.6',
 '/usr/lib/python3.6/lib-dynload',
 '/home/pantea/.local/lib/python3.6/site-packages',
 '/usr/local/lib/python3.6/dist-packages',
 '/usr/lib/python3/dist-packages']

here is my url file

from django.conf.urls import url
from django.contrib.auth.views import LoginView,LogoutView
from accounts import views


# from accounts import views

urlpatterns = [
    url(r'^$',views.home),
    url(r'^login/$', LoginView, {'template_name': 'accounts/login.html'}),
    url(r'^logout/$', LogoutView, {'template_name': 'accounts/logout.html'}),
    url(r'^register/$',views.register, name ='register'),
    url(r'^profile/$',views.view_profile, name ='view_profile'),
    url(r'^profile/edit/$',views.edit_profile , name ='edit profile'),
   
]

and also my views file

from django.contrib.auth.views import PasswordChangeDoneView
from django.shortcuts import render,redirect
from accounts.forms import NewUserForm
from django.contrib.auth.models import User
from django.contrib.auth.forms import PasswordChangeForm, UserChangeForm


def home(request):
    numbers = [1,2,3,4,5]
    name = 'max'
    
    args = {'myName': name,'numbers':numbers}
    return render(request, 'accounts/home.html',args)

def register(request):
    if request.method == 'POST':
        form = NewUserForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('/account')
    else:
        form = NewUserForm()
        args = {'form':form}
        return render(request,'accounts/reg_form.html',args)

def view_profile(request):
    args ={'user':request.user}
    return render(request,'accounts/profile.html',args)  

def edit_profile(request):
    if request.method == 'POST':
        form = PasswordChangeForm(request.POST, instance=request.user)

        if form.is_valid():
            form.save()
            return redirect('/account/profile')
        
    else: 
        form = PasswordChangeDoneView(instance=request.user)
        args={'form':form}
        return render(request,'accounts/edit_profile.html')


def edit_profile(request):
    if request.method == 'POST':
        form = PasswordChangeDoneView(request.POST, instance=request.user)
        if form.is_valid():
            form.save()
            return redirect('/account/profile')
        
    else: 
        form = PasswordChangeDoneView(instance=request.user)
        args={'form':form}
        return render(request,'accounts/change_password.html',args)

they are both in same folder that named account it's work when i looking for http://127.0.0.1:8000/account/ idon't really know what should i do for this :)

1 Answers

The LoginView, LogoutView, etc. are class-based views, so you should use .as_view(…) [Django-doc]:

urlpatterns = [
    url(r'^$',views.home),
    url(r'^login/$', LoginView.as_view(template_name='accounts/login.html')),
    url(r'^logout/$', LogoutView.as_view(template_name='accounts/logout.html')),
    url(r'^register/$',views.register, name ='register'),
    url(r'^profile/$',views.view_profile, name ='view_profile'),
    url(r'^profile/edit/$',views.edit_profile , name ='edit profile'),  
]

Note: As of , url(…) [Django-doc] is deprecated in favor of re_path(…) [Django-doc]. Furthermore a new syntax for paths has been introduced with path converters: you use path(…) [Django-doc] for that.

Related