学到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>邮 箱</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>密 码</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>验 证 码</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中
032017-02-01
相似问题