2017-07-04 2 views
2

Bitte ich brauche Hilfe. Ich habe ein Problem bei der Erweiterung userprofile.Am ersten scheint alles gut zu funktionieren bis jetzt. Bitte ich brauche Hilfe bei der Lösung dieser Balg ist mein Code. Model.pyErweitern Benutzerprofil

class UserProfile(models.Model): 
    user = models.OneToOneField(User,on_delete=models.CASCADE,related_name="userprofile") 
    date =models.DateField(blank=False,null= True) 
    bio = models.TextField(max_length=500,blank=False) 
    picture = models.ImageField(upload_to="profile_image",null=True,blank=True) 
    company = models.CharField(max_length=500,null=True) 
    def __str__(self): 
     return self.user.username 

    @receiver(post_save,sender=User) 
    def create_profile(sender,instance,created,**kwargs): 
     if created: 
      UserProfile.objects.create(user=instance) 
    @receiver(post_save,sender=User) 
    def save_user_profile(sender,instance,**kwargs): 
     instance.UserProfile.save() 

views.py

def update_profile(request): 
    if request.method == 'POST': 

     profile_form = ProfileForm(request.POST,request.FILES,instance=request.user.userprofile) 
     if profile_form.is_valid(): 
      profile_form.save() 
      messages.success(request,'Your Profile has been Updated') 
      return redirect('success:profile_account') 
     else: 
      messages.error(request,'fill out the fields correctly') 
    else: 

     profile_form = ProfileForm(instance=request.user.userprofile) 
    return render(request,"success/user_account/edit_profile.html",{'profile_form':profile_form}) 

html.form

<form action='{{ action_url }}' method="post" enctype="multipart/form-data"> 
    {% csrf_token %} 

     {{ profile_form.bio}}{{profile_form.bio.error}} 

    {{ profile_form.picture}}{{profile_form.picture.error}} 

     <div class="pc"><label>Company Name:</label>{{ profile_form.company}}{{profile_form.company.error}} 

    {{ profile_form.date}}{{profile_form.date.error}} 
    <button type="submit">Save changes</button> 

Fehler ich

Forbidden (403)

CSRF-Überprüfung fehlgeschlagen. Anfrage abgebrochen. Hilfe

Grund für das Scheitern gegeben:

CSRF token missing or incorrect. 

Im Allgemeinen kann dies auftreten, wenn es eine echte Anfrage Cross Site ist Forgery, oder wenn Djangos CSRF Mechanismus nicht richtig eingesetzt. Für POST Formen, müssen Sie sicherstellen:

Your browser is accepting cookies. 
The view function passes a request to the template's render method. 
In the template, there is a {% csrf_token %} template tag inside each POST form that targets an internal URL. 
If you are not using CsrfViewMiddleware, then you must use csrf_protect on any views that use the csrf_token template tag, as 

auch solche, die die POST-Daten übernehmen. Das Formular enthält ein gültiges CSRF-Token. Nachdem Sie sich in einem anderen Browser-Tab angemeldet oder nach einem Login die Zurück-Taste gedrückt haben, müssen Sie möglicherweise die Seite mit dem Formular neu laden, da das Token nach einer Anmeldung rotiert wird.

Sie sehen den Hilfebereich dieser Seite, weil Sie DEBUG = True in Ihrer Django-Einstellungsdatei haben. Ändern Sie das in False, und nur die anfängliche Fehlermeldung wird angezeigt.

Sie können diese Seite mit der Einstellung CSRF_FAILURE_VIEW anpassen.

+1

ich, wenn diese Dinge nicht wissen, zu verlängern, aber hast du dein form-tag geschlossen? –

Antwort

0

dies ist der beste Weg, Benutzermodell Profil

from django.contrib.auth.models import AbstractBaseUser 
from django.db import models 
from django.contrib.auth.models import BaseUserManager 


class AccountManager(BaseUserManager): 
    def create_user(self, username, password=None, **kwargs): 
     if not username: 
      raise ValueError('Users must have a valid email username.') 

     if not kwargs.get('email'): 
      raise ValueError('Users must have a valid email.') 

     email = kwargs.get('email') 
     account = self.model(
      username=username, email=self.normalize_email(email) 
     ) 

     account.set_password(password) 
     account.save() 

     return account 

    def create_superuser(self, username, password, **kwargs): 
     account = self.create_user(username, password, **kwargs) 

     account.is_admin = True 
     account.save() 

     return account 

class Account(AbstractBaseUser):  
    username = models.CharField(max_length=40, unique=True) 
    email = models.EmailField(unique=True) 

    first_name = models.CharField(max_length=40, blank=True) 
    last_name = models.CharField(max_length=40, blank=True) 

    is_admin = models.BooleanField(default=False) 

    created_at = models.DateTimeField(auto_now_add=True) 
    updated_at = models.DateTimeField(auto_now=True) 

    objects = AccountManager() 

    USERNAME_FIELD = 'username' 
    REQUIRED_FIELDS = ['email', 'first_name', 'last_name'] 

    def __unicode__(self): 
     return self.email 

    def get_full_name(self): 
     return ' '.join([self.first_name, self.last_name]) 

    def get_short_name(self): 
     return self.first_name 

modifizieren Beispiel und dann in forms.py nur importieren Sie Modell Benutzerprofil

+0

Wie wird die view.py aussieht wie – Scofield

+0

kann dies helfen https://docs.djangoproject.com/en/1.11/topics/forms/, wenn Sie ein Formular von Modellen https: //docs.djangoproject erstellen möchten. com/de/1.11/topics/forms/modellformen / –