2016-07-25 2 views
0

Я пытаюсь определить класс в views.py, который наследует общий вид. Код выглядит следующим образом. На запущенном сервере я получаю ошибку, что класс UserFormView (View): NameError: name 'View' не определенNameError: name 'View' не определен в views.py

, хотя у меня есть общий. Пожалуйста, дайте мне знать причину.

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') 
` 
+1

Возможно, вы скопировали это откуда-нибудь? Почему автор не импортировал 'View'? https://docs.djangoproject.com/en/1.9/topics/class-based-views/intro/#using-class-based-views –

+0

Это потому, что нет View, Import it 'из django.views.generic import View' – kapilsdv

+0

Я следую руководству thenewboston на youtube –

ответ

2

View имя должно быть импортирован. Добавьте следующий оператор импорта:

from django.views.generic import View 

Или использовать уже импортированные generic модуль в

class UserFormView(generic.View) 
#     ^
1

Вам необходимо либо импортировать View явно:

from django.views.generic import View 

или относятся к нему как generic.View:

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

в urls.py

from my_app import views 

например код:

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

from django.shortcuts import render 

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

Угадайте, это решит проблему.