I know that I can use @login_required but it is only used when we store user in User But in my case I stored model in form So it is not working for me. Also my created user is not getting authenticated when I use user.is_authenticated So I need custom login_required decorator which can be use to stop anyone from accessing direct url (confidential URl which are only accessed when you Login).

forms.py

class usrForm(forms.ModelForm):
    password = forms.CharField(initial=123)
    
    class Meta:
        model = Person
        fields = ('first_name','last_name','username','email','password','position')


    def __init__(self, *args, **kwargs):
        super(usrForm,self).__init__(*args,**kwargs)
        self.fields['position'].empty_label = "Select"

class usrChange(forms.ModelForm):

    class Meta:
        model = Person
        fields = ('username','password')
        widgets= {
            'password' : forms.PasswordInput(),
            }

class loginForm(forms.ModelForm):

    class Meta:
        model = Person
        fields = ('username','password')
        widgets= {
            'password' : forms.PasswordInput(),
            }

models.py

class Position(models.Model):
    title = models.CharField(max_length=50)
    def __str__(self):
        return self.title

class Person(models.Model):
    first_name = models.CharField(max_length=50,default='')
    last_name = models.CharField(max_length=50,default='')
    username = models.CharField(max_length=50,default='')
    password = models.CharField(max_length=50,default='')
    email = models.EmailField(max_length=50)
    position = models.ForeignKey(Position, on_delete=models.CASCADE)
    
    def __str__(self):
        return self.username

views.py

def user_list(request):
    
        context = {'user_list' : Person.objects.all()}
        
        return render(request, "usr_list.html", context)

    
        
    
def user_chnged_list(request):
    form = usrForm(request.POST)
    if form.is_valid():
        form.save()
    context = {'user_list' : Person.objects.all()}
    
    return render(request, "usr_list.html", context)       




def user_form(request, id=0):


    
    
    if request.method == "GET":
        if id ==0:
            form = usrForm(initial={'password': 123})  # register 
            
        else:
            auser = Person.objects.get(pk=id)
            form = usrForm(instance=auser) #update
            
        return render(request, "usr_form.html",{'form': form})

    else:
        if id == 0:
            form = usrForm(request.POST , initial={'password': 123}) # register
           
        else:
            auser = Person.objects.get(pk=id) #update
            form = usrForm(request.POST,instance=auser)
             
        if form.is_valid():
            form.save()

        
            
        return redirect('login')


 
def user_delete(request,id):
    auser = Person.objects.get(pk=id)
    auser.delete()
    return redirect('list')


def user_login(request):
    
    form = loginForm()
    if request.method == 'POST':
        form = loginForm(data=request.POST)
        if form.is_valid():
            username=form.cleaned_data.get('username')
            password=form.cleaned_data.get('password')
            i = Person.objects.filter(username=username,password=password).exists()
            user = {'user_list' : Person.objects.filter(username=username,password=password)}
            
            
            
            if i == True:
                j = Person.objects.filter(username=username, position_id = 1).exists()
                if j == True:
                   
                    return redirect('list')
                
                return render(request,"usr_wlc.html", user )
            else:
                messages.error(request, 'Invalid username or password!')
            
                
    context = {'form':form}
    return render(request,'usr_login.html',context)


def user_detail(request,id):
    auser = Person.objects.get(pk=id) 
    form = usrChange(request.POST,instance=auser)    
    if form.is_valid():
        form.save()
    return redirect('login')


def user_logout(request):
    return redirect('/')



def user_change(request,id):
    auser = Person.objects.get(pk=id) #update
    form = usrChange(request.POST,instance=auser)
    
    return render(request, "usr_chnge.html",{'form': form}) 
0

There are 0 best solutions below