2017-10-08 60 views
1

Django表格 - 我的图片无效

这太令人讨厌了。我想有使用“的ImageField()”和Django的内置“从django.contrib.auth.models导入用户”标识用户配置文件,但我的形象总是能” t pass “is_valid()”。请帮帮我。Django表格 - 我的图片无效

PS。忽略RECAPTCHA位。它与这个bug无关。相信我,相信我。

这是我的views.py

import json 
import urllib 
import PIL 

from django.shortcuts import render, redirect 
from django.http import HttpResponse 
from django.contrib.auth import authenticate 
from django.contrib.auth import login as auth_login 
from django.contrib.auth import logout 
from django.views.generic import View 
from .forms import UserForm, UserProfileForm 
from django.conf import settings 

def log_out(request): 
    logout(request) 
    form = UserProfileForm(request.POST or None) 
    return redirect("/", request) 

def login(request): 
    if request.method == "POST": 
     username = request.POST['username'] 
     password = request.POST['password'] 
     user = authenticate(username=username, password=password) 
     if user is not None: 
      if user.is_active: 
       auth_login(request, user) 
       return redirect("/", username=request.user.username, is_active=request.user.is_active) 
      else: 
       return render(request, 'Index/login.html', {'Error_Message': 'Your account has been disabled'.upper()}) 
     else: 
      return render(request, 'Index/login.html', {'Error_Message': 'Invalid log in'.upper()}) 
    return render(request, 'Index/login.html', {"username": request.user.username}) 

def register(request): 
    Form1 = UserForm(request.POST or None) 
    Form2 = UserProfileForm(request.POST or None and request.FILES or None) 

    if request.method == "POST": 

     recaptcha_response = request.POST.get('g-recaptcha-response') 
     url = 'https://www.google.com/recaptcha/api/siteverify' 
     values = { 
      'secret': settings.GOOGLE_RECAPTCHA_SECRET_KEY, 
      'response': recaptcha_response, 
     } 
     data = urllib.parse.urlencode(values).encode() 
     req = urllib.request.Request(url, data=data) 
     response = urllib.request.urlopen(req) 
     result = json.loads(response.read().decode()) 

     if result['success']: 
      if Form1.is_valid(): 
       User1 = Form1.save(commit=False) 

       username = Form1.cleaned_data["username"] 
       email = Form1.cleaned_data["email"] 
       password = Form1.cleaned_data["password"] 
       User1.save() 

       User1 = authenticate(username=username, email=email, password=password) 

       if User1 is not None: 
        if User1.is_active: 
         auth_login(request, User1) 
         return redirect("/", request) 
        else: 
         return render(request, 'Index/login.html', {'Error_Message': 'Your account has been disabled'.upper()}) 

      else: 
       return render(request, 'Index/register.html', {'Error_Message': 'Invalid sign up'.upper()}) 

      if Form2.is_valid(): 
       User2 = Form2.save(commit=False) 

       logo = request.FILES["logo"] 
       user = User1 
       User2.save() 

      else: 
       return render(request, 'Index/register.html', {'Error_Message': 'Invalid logo'.upper()}) 

     else: 
      return render(request, 'Index/register.html', {'Error_Message': a.upper() for a in result['error-codes']}) 

    return render(request, "Index/register.html", {"is_active": request.user.is_active, "username": request.user.username}) 

,这是我forms.py

from django import forms 
from django.contrib.auth.models import User 
from .models import UserProfile 

class UserForm(forms.ModelForm): 
    class Meta: 
     model = User 
     fields = ["username", "email", "password"] 

class UserProfileForm(forms.ModelForm): 
    class Meta: 
     model = UserProfile 
     fields = ["logo"] 

我的models.py

from django.db import models 
from django.contrib.auth.models import User 


# Create your models here. 
class UserProfile(models.Model): 
    logo = models.ImageField(upload_to="logos/") 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 

我的HTML

{% extends "Index/base.html" %} 
<!DOCTYPE html> 
<html> 
<head> 
    {% block head %} 
    <title> 
     REGISTER 
    </title> 
    {% endblock %} 
</head> 
<body> 
    {% block title %} 
    <h1 id="h1b"> 
     GreatestNinja Sign Up 
    </h1> 
    {% endblock %} 
    {% block body %} 
    <div class="container"> 
     {% if Error_Message %} 
     <div class="alert alert-danger alert-dismissible" role="alert"> 
      <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
      <strong >Warning!</strong><h4 style="text-align: center;"><strong>{{ Error_Message }}</strong></h4> 
     </div> 
     {% endif %} 
     <form class="form-horizontal" action="/register/" method="post" enctype="multipart/form-data"> 
      {% csrf_token %} 
      <img src="#" id="logoImage" style="display: block; margin: 0 auto"> 
      <div class="input-group"> 
       <span class="input-group-addon" id="LogoDescribe">Logo:</span> 
       <input type="file" accept="image/*" class="form-control" aria-describedby="LogoDescribe" name="logo" onchange="DisplayImage(this);"> 
      </div> 
      <div class="input-group"> 
       <span class="input-group-addon" id="UsernameDescribe">Username:</span> 
       <input type="text" class="form-control" aria-describedby="UsernameDescribe" placeholder="DonaldTrump" autocomplete="off" name="username" value=""> 
      </div> 
      <div class="input-group"> 
       <span class="input-group-addon" id="EmailDescribe">Email:</span> 
       <input type="email" class="form-control" aria-describedby="EmailDescribe" placeholder="[email protected]" autocomplete="off" name="email" value=""> 
      </div> 
      <div class="input-group"> 
       <span class="input-group-addon" id="PasswordDescribe">Password:</span> 
       <input type="password" class="form-control" aria-describedby="PasswordDescribe" placeholder="[email protected]" autocomplete="off" name="password" value=""> 
      </div> 
      <div class="g-recaptcha" data-sitekey="6LcDyDIUAAAAANjE4F6ckiCwiDLFvwWjEg-LTKHn" align="center"></div> 
      <div> 
       <button type="submit" style="width: 100%" class="btn btn-success">Submit</button> 
      </div> 
     </form> 
    </div> 
    <script> 
     function DisplayImage(input) { 
      if (input.files && input.files[0]) { 
       var ImageReader = new FileReader(); 

       ImageReader.onload = function (e) { 
        $('#logoImage') 
         .attr("src", e.target.result) 
         .width(100) 
         .height(100); 
       }; 

       ImageReader.readAsDataURL(input.files[0]); 
      } 
     } 
    </script> 
    {% endblock %} 
</body> 
</html> 
+0

谢谢大家我解决了我的问题,我的答案是下面 – kiwirafe

回答

0

我解决了这个问题,我的解决方案在views.py是:

import json 
import urllib 

from django.shortcuts import render, redirect 
from django.http import HttpResponse 
from django.contrib.auth import authenticate 
from django.contrib.auth import login as auth_login 
from django.contrib.auth import logout 
from django.views.generic import View 
from django.conf import settings 
from .forms import UserForm, UserProfileForm 
from .models import UserProfile 
from django.contrib.auth.models import User 


def index(request): 
    return render(request, 'Index/index.html') 


def calculator(request): 
    return render(request, 'Index/calculator.html') 

def snake(request): 
    return render(request, 'Index/snake.html') 

def youtube(request): 
    return render(request, 'Index/youtube.html') 

def scratch(request): 
    return render(request, 'Index/scratch.html') 


def log_out(request): 
    logout(request) 
    form = UserProfileForm(request.POST) 
    return redirect("/", request) 

def login(request): 
    if request.method == "POST": 
     username = request.POST['username'] 
     password = request.POST['password'] 
     user = authenticate(username=username, password=password) 
     if user is not None: 
      if user.is_active: 
       auth_login(request, user) 
       return redirect("/", username=request.user.username, is_active=request.user.is_active) 
      else: 
       return render(request, 'Index/login.html', {'Error_Message': 'Your account has been disabled'.upper()}) 
     else: 
      return render(request, 'Index/login.html', {'Error_Message': 'Invalid log in'.upper()}) 
    return render(request, 'Index/login.html', {"username": request.user.username}) 

def register(request): 
    Form1 = UserForm(request.POST) 
    Form2 = UserProfileForm(request.POST, request.FILES) 

    if request.method == "POST": 

     recaptcha_response = request.POST.get('g-recaptcha-response') 
     url = 'https://www.google.com/recaptcha/api/siteverify' 
     values = { 
      'secret': settings.GOOGLE_RECAPTCHA_SECRET_KEY, 
      'response': recaptcha_response, 
     } 
     data = urllib.parse.urlencode(values).encode() 
     req = urllib.request.Request(url, data=data) 
     response = urllib.request.urlopen(req) 
     result = json.loads(response.read().decode()) 

     if result['success']: 

      if Form1.is_valid(): 
       User1 = Form1.save(commit=False) 

       username = Form1.cleaned_data["username"] 
       email = Form1.cleaned_data["email"] 
       password = Form1.cleaned_data["password"] 
       User1.set_password(password) 
       User1.save() 

       User1 = authenticate(username=username, email=email, password=password) 

       if User1.is_active: 
        if Form2.is_valid(): 
         User2 = Form2.save(commit=False) 

         #logo = UserProfile(logo=request.FILES["logo"]) 
         User2.user = User1 
         User2.save() 

         auth_login(request, User1) 

         return redirect("/", request) 

        else: 
         return render(request, 'Index/register.html', {'Error_Message': request.POST}) 

       else: 
        return render(request, 'Index/login.html', {'Error_Message': 'Your account has been disabled'.upper()}) 

      else: 
       return render(request, 'Index/register.html', {'Error_Message': 'Invalid sign up'.upper()}) 

     else: 
      return render(request, 'Index/register.html', {'Error_Message': 'RECAPTCHA: ' + a.upper() for a in result['error-codes']}) 

    return render(request, "Index/register.html", {"is_active": request.user.is_active, "username": request.user.username})