"AnonymousUser"对象没有属性"_meta" [英] 'AnonymousUser' object has no attribute '_meta'

查看:62
本文介绍了"AnonymousUser"对象没有属性"_meta"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

views.py代码

views.py code

from django.shortcuts import render,redirect
from django.http import HttpResponse
from django.contrib.auth.forms import UserCreationForm
from tutorial import views
from accounts.form import Registrationform,EditProfileForm
from django.contrib.auth.forms import UserChangeForm,PasswordChangeForm
from django.contrib.auth.models import User
from django.contrib.auth import update_session_auth_hash
# Create your views here.

def home(request):
    numbers=[1,2,3,4,5]
    name="jay"
    args={'myName':name}

    return render(request,'accounts/home.html',args)
def register(request):
    if request.method == "POST":
        form = Registrationform(request.POST)
        if form.is_valid():
            form.save()
            return redirect('/account')
        else:
            return HttpResponse('please fill all the fields and make sure new password must be match')
    else:
        form = Registrationform()
        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 = EditProfileForm(request.POST,instance=request.user)
        if form.is_valid():
            form.save()
            return redirect('/account/profile')
    else:
        form  =  EditProfileForm(instance=request.user)
        args = {'form' : form}
        return render(request,'accounts/edit_profile.html',args)

def change_password(request):
    if request.method == "POST":
        form = PasswordChangeForm(data=request.POST,user=request.user)
        if form.is_valid():
            form.save()
            update_session_auth_hash(request, form.user)
            return redirect('/account/profile')
        else:
            return HttpResponse("password doest not match,go back and try again")
    else:
        form = PasswordChangeForm(user=request.user)
        args = {'form' : form}
        return render(request,'accounts/change_password.html',args)

而form.py是

from django import forms
from django.contrib.auth.forms import UserCreationForm,UserChangeForm
from django.contrib.auth.models import User
#from django.forms import RegistrationForm,EditProfileForm

class Registrationform(UserCreationForm):
    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = (
        'username',
        'first_name',
        'last_name',
        'email',
        'password1',
        'password2',
        )
    def save(self,commit=True):
        user=super(Registrationform,self).save(commit=False)
        user.first_name= self.cleaned_data['first_name']
        user.last_name=self.cleaned_data['last_name']
        user.email=self.cleaned_data['email']
        if commit:
            user.save()
        return user
class EditProfileForm(UserChangeForm):
    #template_name = '/something/else'
    class Meta:
        model = User
        fields = (
        'email',
        'first_name',
        'last_name',
        'password'
         )

和urls.py

#python -m smtpd -n -c DebuggingServer localhost:1025
from django.contrib import admin
from .import views
from django.conf.urls import url,include
from django.contrib.auth.views import login,logout,password_reset,password_reset_done,password_reset_confirm,password_reset_complete
#from django.urls import path

urlpatterns = [
    url(r'^$',views.home),
    url(r'^login/$',login,{'template_name' : 'accounts/login.html'}),
    url(r'^logout/$',logout,{'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'),
    url(r'^change-password/$',views.change_password,name='change_password'),
    url(r'^reset-password/$',password_reset,name='reset_password'),
    url(r'^reset-password/done/$',password_reset_done,name='password_reset_done'),
    url(r'^reset-password/confirm/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$',
    password_reset_confirm,name='password_reset_confirm' ),
    url(r'^reset-password-complete/$',password_reset_complete,name='password_reset_complete'),


]

因此,当我输入网址时-" http://127.0.0.1:8000/account/profile/edit/它给我错误

So when i enter url -" http://127.0.0.1:8000/account/profile/edit/ " its give me error

"'AnonymousUser'对象没有属性'_meta'"

"'AnonymousUser' object has no attribute '_meta'"

这是什么错误?我在这里做错了什么?和django给出此行错误

What is the mistake ?what i did wrong here ? and django gives this line error

/usr/local/lib/python2.7/dist-packages/django/utils/functional.py在内部,第205行.

/usr/local/lib/python2.7/dist-packages/django/utils/functional.py in inner, line 205.

我该怎么做才能解决此错误?

what should i do to solve this error ?

推荐答案

最好使用 login_required 装饰器.它将检查用户是否登录,而不进行显式编码.

It's better to use login_required decorator. It will check whether user logged in or not without coding it explicitly.

from django.contrib.auth.decorators import login_required

@login_required
def edit_profile(request):

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

这篇关于"AnonymousUser"对象没有属性"_meta"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆