简体   繁体   English

NameError:名称“视图”未在views.py中定义

[英]NameError: name 'View' is not defined in views.py

I am trying to define a class in views.py which is inheriting generic view. 我试图在views.py中定义一个继承通用视图的类。 The code is as follows. 代码如下。 On running server I get the error that class UserFormView(View): NameError: name 'View' is not defined 在运行的服务器上,我收到以下错误:类UserFormView(View):NameError:名称'View'未定义

although I have imported generic. 虽然我已经导入了仿制药。 Please let me know the reason. 请让我知道原因。

from django.views import generic
from django.utils import timezone
from django.shortcuts import render, get_object_or_404,render_to_response,redirect
from django.http import HttpResponseRedirect
from django.contrib import auth
from django.contrib.auth import authenticate,login
from django.core.context_processors import csrf
from .forms import UserForm

# Create your views here.

def home(request):
    return render(request, 'fosssite/home.html')
def login(request):
    c={}
    c.update(csrf(request))
    return render_to_response('fosssite/login.html',c)

class UserFormView(View):
    form_class=UserForm
    template_name='fosssite/signup.html'

    def get(self,request):
        form=self.form_class(None)
        return render(request,self.template_name,{'form':form})


        #validate by forms of django
    def post(self,request):
        form=self.form_class(request.POST)

        if form.is_valid():
            # not saving to database only creating object
            user=form.save(commit=False)
            #normalized data
            username=form.cleaned_data['username']
            password=form.cleaned_data['password']
            #not as plain data
            user.set_password(password)
            user.save() #saved to database


def auth_view(request):
    username=request.POST.get('username', '')
    password=request.POST.get('password', '')
    user=auth.authenticate(username=username,password=password)

    if user is not None:
        auth.login(request,user)
        return HttpResponseRedirect('/loggedin')#url in brackets
    else:
        return HttpResponseRedirect('/invalid')

def loggedin(request):
    return render_to_response('fosssite/loggedin.html',{'fullname':request.user.username})

def logout(request):
    auth.logout(request)
    return render_to_response('fosssite/logout.html')

def invalid_login(request):
    return render_to_response('fosssite/invalid_login.html')
`

The View name needs to be imported . View名称需要导入 Add the following import statement: 添加以下导入语句:

from django.views.generic import View

Or use the already imported generic module in 或者使用已经导入的generic模块

class UserFormView(generic.View)
#                     ^

You need to either import View explicitly: 您需要显式导入View

from django.views.generic import View

or refer to it as generic.View : 或将其称为generic.View

class UserFormView(generic.View):
    # ...

in urls.py 在urls.py中

 from my_app import views

eg code: 例如代码:

urls.py urls.py

from django.conf.urls import url
from django.contrib import admin
from pro1 import views


urlpatterns = [
     url(r'^$', views.home, name='home'),
    url(r'^admin/', admin.site.urls),
]

views.py views.py

from django.shortcuts import render

def home(request):
    template="home.html"
    context={}
    return render(request,template,context)

guess it will solve the problem. 猜猜它会解决问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM