学到register,URL配置后,出现no attribute 'as_view'

来源:

loklei

2017-02-01

谢谢老师,不好意思,这些问题我凭自己搜索实在找不到答案,于是只好再次求助您:

如下,谢谢您。

URL的配置。其中 as_view 的代码有错误颜色提示,

from django.conf.urls import url,include
from django.contrib import admin
from django.views.generic import TemplateView

import  xadmin
from users.views import LoginView, RegisterView, ActiveUserView


urlpatterns = [
    url(r'^xadmin/', xadmin.site.urls),
    url('^$',TemplateView.as_view(template_name="index.html"),name="index"),
    url('^login/$', LoginView.as_view(), name="login"),
    url('^register/$', RegisterView.as_view(), name="register"),
    url(r'^captcha/', include('captcha.urls')),
    url(r'^active/(?P<active_code>.*)/$', ActiveUserView.as_view(),name="user_active")
]

这里是 view页面的代码

# -*- coding:utf-8 -*-
from django.shortcuts import render
from django.contrib.auth import  authenticate,login
from django.contrib.auth.backends import ModelBackend
from django.db.models import Q
from django.views.generic.base import View
from django.contrib.auth.hashers import make_password
from  .models import UserProfile,EmailverifyRecord
from .forms import LoginForm, RegisterForm
from utils.email_send import send_register_email


class CustomBackend(ModelBackend):
    def authenticate(self, username=None, password=None, **kwargs):
        try:
            user = UserProfile.objects.get(Q(username=username)|Q(email=username))
            if user.check_password(password):
                return  user
        except Exception as e:
            return None


class ActiveUserView:
    def get(self, request, active_code):
        all_records = EmailverifyRecord.objects.get.filter(code=active_code)
        if all_records:
            for record in all_records:
                email =record.email
                user = UserProfile.objects.get(email=email)
                user.is_active =True
                user.save()
        return render(request,"login.html")

# # Create your views here.

class RegisterView(View):
    def get(self,request):
        register_form = RegisterForm()
        return render(request,"register.html",{'register_form':register_form})

    def post(self,request):
        register_form =RegisterForm(request.POST)
        if register_form.is_valid():
            user_name = request.POST.get("email", "")
            pass_word = request.POST.get("password", "")
            user_profile =UserProfile()
            user_profile.username = user_name
            user_profile.email = user_name
            user_profile.is_active =False
            user_profile.password =make_password(pass_word)
            user_profile.save()

            send_register_email(user_name,"register")
            return render(request, "login.html")
        else:
            return render(request, "register.html",{"register_form":register_form})


class LoginView(View):
    def get(self,request):
        return render(request, "login.html", {})
    def post(self,request):
        login_form = LoginForm(request.POST)
        if login_form.is_valid():
            user_name = request.POST.get("username", "")
            pass_word = request.POST.get("password", "")
            user = authenticate(username=user_name, password=pass_word)
            if user is not None:
                if user.is_active:
                    login(request, user)
                    return render(request, "index.html")
                else:
                    return render(request, "login.html", {"msg": "用户名或密码错误!"})

            else:
                return render(request, "login.html", {"msg": "用户名或密码错误!"})
        else:
            return render(request, "login.html", {"login_form":login_form})

/*********************************************分割线*********************************************/

我将url中的

url(r'^active/(?P<active_code>.*)/$', ActiveUserView.as_view(),name="user_active")

改成

url(r'^active/(?P<active_code>.*)/$', ActiveUserView(),name="user_active")

能正常启动mxonline了,但是访问 http://127.0.0.1:8000/register/  又出现这样的错误:

其中  148{{ register_form.captcha }}   是标红提示的

ViewDoesNotExist at /register/
'<users.views.ActiveUserView instance at 0x10fcd34d0>' is not a callable or a dot-notation path
Request Method:GET    
Request URL:http://127.0.0.1:8000/register/    
Django Version:1.9    
Exception Type:ViewDoesNotExist    
Exception Value:'<users.views.ActiveUserView instance at 0x10fcd34d0>' is not a callable or a dot-notation path
    
Exception Location:/Users/apple/.virtualenvs/mxonline/lib/python2.7/site-packages/django/core/urlresolvers.py in get_callable, line 102    
Python Executable:/Users/apple/.virtualenvs/mxonline/bin/python    
Python Version:2.7.10    
Python Path:['/Users/apple/PycharmProjects/mxonline/extra_apps',
 '/Users/apple/PycharmProjects/mxonline/apps',
 '/Users/apple/PycharmProjects/mxonline',
 '/Applications/PyCharm.app/Contents/helpers/pydev',
 '/Users/apple/PycharmProjects/mxonline/apps',
 '/Users/apple/PycharmProjects/mxonline/extra_apps',
 '/Users/apple/PycharmProjects/mxonline',
 '/Applications/PyCharm.app/Contents/helpers/pydev',
 '/Users/apple/.virtualenvs/mxonline/lib/python27.zip',
 '/Users/apple/.virtualenvs/mxonline/lib/python2.7',
 '/Users/apple/.virtualenvs/mxonline/lib/python2.7/plat-darwin',
 '/Users/apple/.virtualenvs/mxonline/lib/python2.7/plat-mac',
 '/Users/apple/.virtualenvs/mxonline/lib/python2.7/plat-mac/lib-scriptpackages',
 '/Users/apple/.virtualenvs/mxonline/lib/python2.7/lib-tk',
 '/Users/apple/.virtualenvs/mxonline/lib/python2.7/lib-old',
 '/Users/apple/.virtualenvs/mxonline/lib/python2.7/lib-dynload',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
 '/Users/apple/.virtualenvs/mxonline/lib/python2.7/site-packages']
    
Server time:星期三, 1 二月 2017 01:35:11 +0800    
Error during template rendering
In template /Users/apple/PycharmProjects/mxonline/templates/register.html, error at line 148
'<users.views.ActiveUserView instance at 0x10fcd34d0>' is not a callable or a dot-notation path
138<div class="form-group marb20 {% if register_form.errors.email %}errorput{% endif %}">    
139<label>邮&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;箱</label>    
140<input  type="text" id="id_email" name="email" value="{{ register_form.email.value }}" placeholder="请输入您的邮箱地址" />    
141</div>    
142<div class="form-group marb8 {% if register_form.errors.password %}errorput{% endif %}">    
143<label>密&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;码</label>    
144<input type="password" id="id_password" name="password"  value="{{ register_form.password.value }}" placeholder="请输入6-20位非中文字符密码" />    
145</div>    
146<div class="form-group marb8 captcha1 {% if register_form.errors.captcha %}errorput{% endif %}">    
147<label>验&nbsp;证&nbsp;码</label>    
148{{ register_form.captcha }}    
149
150</div>    
151<div class="error btns" id="jsEmailTips">{%  for key,error in register_form.errors.items %}{{ error }}{%  endfor %}{{ msg }}</div>    
152<div class="auto-box marb8">    
153</div>


写回答

1回答

bobby

2017-02-01

亲 你的 ActiveUserView 必须要继承View。 不能自己随便写, 要不然你就把这个地方改成函数也行,没有你这种做法, 不能直接把你自己定义的view配置到url中

0
3
loklei
回复
bobby
谢谢老师,ActiveUserView 应该是 ActiveUserView(view) 才对。:)
2017-02-01
共3条回复

Python3.6+django+xadmin,打造在线教育平台

【毕设】Python 2.7到3.6 完美适配,Django升级2.0

3677 学习 · 4041 问题

查看课程