Django注册,主要问题

时间:2017-09-11 09:29:57

标签: django django-models django-forms django-views django-authentication

我的身份验证过程存在问题。 我创建了一个SignIN流程,让用户只能使用他的邮件创建一个新帐户,该帐户在他编辑提供他的名字,姓氏和密码之前一直处于非活动状态。 我试了一下,但是我转到编辑配置文件的URL我收到了与PK相关的错误..

错误:

    Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/registration/users/2/edit/

Django Version: 1.11.3
Python Version: 3.6.2
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'registration']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "/Users/raphaelbendenoun/anaconda/envs/myDjangoEnv/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
  41.             response = get_response(request)

File "/Users/raphaelbendenoun/anaconda/envs/myDjangoEnv/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/Users/raphaelbendenoun/anaconda/envs/myDjangoEnv/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/Users/raphaelbendenoun/Documents/testregis/registration/views.py" in update_profile
  41.         user = get_object_or_440(User, pk=pk) #find user instance by id in db

Exception Type: NameError at /registration/users/2/edit/
Exception Value: name 'get_object_or_440' is not defined
'pk'

网址:

from django.conf.urls import url, include
from registration import views

app_name = 'registration'
urlpatterns = [
    url(r'^register/$', views.register, name='register'),
    url(r'^users/(?P<pk>\d+)/edit/$', views.update_profile, name="edit-user-profile"),
]

form.py:

from django import forms
from django.contrib.auth.models import User
from .models import MyUser
from django.contrib.auth import get_user_model

User = get_user_model()

class Form(forms.ModelForm):
    password = forms.CharField(widget= forms.PasswordInput())

    class Meta():
        model = User
        fields= ('first_name','last_name','email','password','company')

class InactiveForm(forms.ModelForm):

    class Meta():
        model = User
        fields= ('email',)


class UpdateProfile(forms.ModelForm):

    email = forms.EmailField(required=True)
    first_name = forms.CharField(required=True)
    last_name = forms.CharField(required=True)
    password = forms.CharField(widget= forms.PasswordInput())

    class Meta:
        model = User
        fields = ('email', 'first_name', 'last_name','password')

    def clean_email(self):
        email = self.cleaned_data.get('email')

        if email and User.objects.filter(email=email).count():
            raise forms.ValidationError('This email address is already in use. Please supply a different email address.')
        return email

    def save(self, commit=True):
        user = super(RegistrationForm, self).save(commit=False)
        user.email = self.cleaned_data['email']

        if commit:
            user.save()

        return user

views.py

from django.shortcuts import render
from django.views import generic
from django.views.generic import TemplateView
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from .forms import InviteForm
from invitations.models import Invitation
from .models import project
from django.core.urlresolvers import reverse

# Create your views here.

class HomePage(TemplateView):
    template_name= 'index.html'

class CandidateIndex(TemplateView):
    template_name= 'candidateIndex.html'

class HRIndex(TemplateView):
    template_name= 'HRindex.html'

class ProjectDetailView(generic.DetailView):
    model = project
    template_name = 'project_details.html'

class ProjectCreate(CreateView):
    model = project
    fields = ['project_name']
    template_name = 'project_form.html'


def create_invite(request):
    if request.method == "POST":
        invite_form = InviteForm(data=request.POST)
        if invite_form.is_valid():
            email1 = invite_form.cleaned_data['email1']
            email2 = invite_form.cleaned_data['email2']
            email3 = invite_form.cleaned_data['email3']
            email4 = invite_form.cleaned_data['email4']
            email5 = invite_form.cleaned_data['email5']
            for i in invite_form.cleaned_data:
                invite = Invitation.create(i)
                invite.send_invitation(request)
            print("The mail was went")
            #return reverse('website:ProjectDetails', kwargs = {'pk' : self.pk} )
        else:
            print("Your form is not valid")
    else:
        invite_form = InviteForm()
    return render(request, 'team_invite.html', {'invite_form': invite_form})

project_detail.html:

{% extends 'base.html' %}
{% block body %}
<div class="container">
  <div class="jumbotron">
    <h2>Welcome to your Project {{project.project_name}} Detail page</h2>
  </div>
  <div class="invite-team">
      <a href="{% url 'website:addteam' %}">GOGO</a>
  </div>
</div>




{% endblock%}

1 个答案:

答案 0 :(得分:0)

您将pk变量从urls.py传递给view方法,但是您的view方法并不期望您必须更改update_profile方法签名,如下所示:

update_profile(request, pk)
    ....

你的方法里面有更多的错误:

form = UpdateProfile(request.POST, instance=request.User)

它可能应该是:

User = get_user_model()
user = get_object_or_404(User, pk=pk) #find user instance by id in db
form = UpdateProfile(request.POST, instance=user)