Kein HttpResponse object

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Laines
User
Beiträge: 39
Registriert: Donnerstag 15. Mai 2008, 18:42

Dienstag 12. August 2008, 19:27

Hallo,
warum bekomme ich immer die Fehlermeldung "The view dateihochlader.hochlader.views._CheckLogin.__call__ didn't return an HttpResponse object." wenn es in den Code Abschnitt

Code: Alles auswählen

if request.method == 'POST':
geht? Ich gebe doch ein HttpResponse zurück.

Hier der Code

Code: Alles auswählen

@login_required
def benutzer(request):
	if request.user.first_name == 'mark':
		# Hole Alle Benutzer
		users = User.objects.all()
		#users.delete()
		AnzahlUser = 0
		AnzahlUserOnline = 0
		files = dbfile.objects.all()
		AnzahlFiles = 0
		for x in files:
			AnzahlFiles += 1
		for x in users:
			AnzahlUser += 1

		if request.method == 'POST':
			matrikelnr = request.matrikelnr
			return HttpResponse("matrikelnr")  

		else:	
			form = DeleteForm()
			return render_to_response("benutzer.html", { 'users' : users, 'form' : form})
	else:
		return HttpResponse("Sie sind nicht mark!")
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Dienstag 12. August 2008, 21:40

Wenn du Django verwendest dann sag das auch. Wir tun hier nicht gerne Rätsel raten. Des weiteren solltest du ein Vollständiges Beispiel posten. dateihochlader.hochlader.views._CheckLogin.__call__ fehlt zum Beispiel komplett, genauso wie die Imports. So wird dir keiner mehr sagen können als die Fehlermeldung es bereits tut.

Code: Alles auswählen

for x in files:
            AnzahlFiles += 1
        for x in users:
            AnzahlUser += 1
Das ist auch nicht so ganz dein ernst oder?
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Laines
User
Beiträge: 39
Registriert: Donnerstag 15. Mai 2008, 18:42

Dienstag 12. August 2008, 22:22

Hi,
ja sry waren wirglich wenig infos. Wenn noch etwas benötigt wird einfach sagen :-)
Hier die Imports:

Code: Alles auswählen

from django import http
import django.newforms as newforms
from forms import CreateUserForm
from forms import DeleteForm
from django.shortcuts import render_to_response
from dateihochlader.settings import MEDIA_ROOT
from dateihochlader.hochlader import *
from time import strftime
import os.path
from models import dbfile
import hashlib
from django.contrib.auth.decorators import login_required
from django.contrib.auth import logout
from django.contrib.auth.models import User
import zipfile
import tarfile
dateihochlader.hochlader.views._CheckLogin.__call__
Sagt mir leider selbst nicht viel. Zumindest der Teil "_CheckLogin.__call__"
dateihochlader.hochlader ist mein Projekt

Und

Code: Alles auswählen

for x in files:
            AnzahlFiles += 1
        for x in users:
            AnzahlUser += 1
Ist schon mein ernst aber deine Entrüstung läst erahnen das es einen besseren Weg gibt...
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 12. August 2008, 22:51

Na etwa

Code: Alles auswählen

len(AnzahlFiles)
:)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 13. August 2008, 10:55

Laines hat geschrieben: Hier die Imports:

Code: Alles auswählen

from django import http
import django.newforms as newforms
from forms import CreateUserForm
from forms import DeleteForm
from django.shortcuts import render_to_response
from dateihochlader.settings import MEDIA_ROOT
from dateihochlader.hochlader import *
from time import strftime
import os.path
from models import dbfile
import hashlib
from django.contrib.auth.decorators import login_required
from django.contrib.auth import logout
from django.contrib.auth.models import User
import zipfile
import tarfile
Das sieht ein wenig grauenhaft aus, in meinen Augen.
Sternchenimports verwende ich fast nie, höchstens bei Exceptions.
Ich würde z.B. ehr time importieren und mit time.strftime arbeiten. Genauso würde ich kein os.path importieren sondern nur os.
newforms gibt es nicht mehr. Dabei importiere ich auch immer nur forms und keine weiter verschachtelten Dinge daraus.

Gerade gibt es zum Thema Import auch eine interessante Diskussion:
http://groups.google.com/group/django-d ... /?q=import
Interessante Seite dazu: http://code.google.com/p/soc/wiki/PythonStyleGuide

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Mittwoch 13. August 2008, 13:17

PEP 8 schlägt vor, Imports in drei Gruppen zu gliedern (oder wo hab' ich das sonst her?) und diese durch je eine Leerzeile zu trennen: Standardlib, 3rd Party sowie die der eigenen Applikation. Dazu gibt's von mir oben drauf GRATIS den Tipp, alphabetisch zu sortieren ;)

Dann sieht das Elend plötzlich wieder überschau- und nachvollziehbar aus:

Code: Alles auswählen

import hashlib
import os.path
import tarfile
from time import strftime
import zipfile

from django import http
from django.contrib.auth.decorators import login_required
from django.contrib.auth import logout
from django.contrib.auth.models import User
import django.newforms as newforms
from django.shortcuts import render_to_response

from dateihochlader.settings import MEDIA_ROOT
from dateihochlader.hochlader import *
from forms import CreateUserForm
from forms import DeleteForm
from models import dbfile
Weiterhin erinnere ich mich dunkel, dass man durch die Import-Änderungen in Python bzgl. absoluten und relativen Imports durchaus gut damit fährt, absolute Imports (z. B. ``import myapp.models``) zu nutzen - oder muss es in Zukunft sogar. Irgendwie so. Jedenfalls wird dann klarer, was woher kommt und Überschneidungen mit bestehenden Modulen (etwa wenn man in der eigenen Applikation ein Modul "datetime" hat) werden vermieden.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Mittwoch 13. August 2008, 17:01

Laines hat geschrieben:Hi,
ja sry waren wirglich wenig infos. Wenn noch etwas benötigt wird einfach sagen :-)
Hier die Imports:

Code: Alles auswählen

from django import http
import django.newforms as newforms
from forms import CreateUserForm
from forms import DeleteForm
from django.shortcuts import render_to_response
from dateihochlader.settings import MEDIA_ROOT
from dateihochlader.hochlader import *
from time import strftime
import os.path
from models import dbfile
import hashlib
from django.contrib.auth.decorators import login_required
from django.contrib.auth import logout
from django.contrib.auth.models import User
import zipfile
import tarfile
Die Checklogin Funktion fehlt immer noch. Poste doch einfach das ganze File ;)
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Laines
User
Beiträge: 39
Registriert: Donnerstag 15. Mai 2008, 18:42

Donnerstag 14. August 2008, 13:08

Ok hier ist alles. Die Funktion Checklogin habe ich aber nicht selbst implementiert, das scheint Django intern zu sein...

views.py

Code: Alles auswählen

from django import http
import django.newforms as newforms
from forms import CreateUserForm
from forms import DeleteForm
from django.shortcuts import render_to_response
from dateihochlader.settings import MEDIA_ROOT
from dateihochlader.hochlader import *
from time import strftime
import os.path
from models import dbfile
import hashlib
from django.contrib.auth.decorators import login_required
from django.contrib.auth import logout
from django.contrib.auth.models import User
import zipfile
import tarfile
 
class SimpleFileForm(newforms.Form):
	file = newforms.Field(widget=newforms.FileInput, required=True)

@login_required
def benutzer(request):
	if request.user.first_name == 'mark':
		# Hole Alle Benutzer
		users = User.objects.all()
		#users.delete()
		AnzahlUser = 0
		AnzahlUserOnline = 0
		files = dbfile.objects.all()
		AnzahlFiles = 0
		for x in files:
			AnzahlFiles += 1
		for x in users:
			AnzahlUser += 1

		if request.method == 'POST':
			matrikelnr = request.matrikelnr
			return http.HttpResponse("matrikelnr")  

		else:	
			form = DeleteForm()
			return render_to_response("benutzer.html", { 'users' : users, 'form' : form})
	else:
		return HttpResponse("Sie sind nicht mark!")	


 
@login_required 
def directupload(request):

	if request.user.first_name == 'mark':
		form = SimpleFileForm()
	
		# Suche nach einem Archiv
		# ZIP
		zipOK = 0
		zipexist = 0
		allfiles = os.listdir('/tmp/')
		for x in allfiles:
			name = '/tmp/'
			name += x
			if zipfile.is_zipfile(name):
				zipexist = 1
				f = open(name)
				z = zipfile.ZipFile(f)
				if z.testzip() == None:
					zipOK = 1
					
		# TAR
		tarOK = 0
		tarexist = 0
		targzexist = 0
		tarbz2exist = 0	
		for x in allfiles:
			name = '/tmp/'
			name += x
			if os.path.isfile(name):
				if tarfile.is_tarfile(name):
					try:
						tryfile = tarfile.open(name, "r:bz2")
						tarbz2exist = 1
						tarOK = 1		
					except:
						try:
							tryfile = tarfile.open(name, "r:gz")
							targzexist = 1
							tarOK = 1		
						except:
							try:
								tryfile = tarfile.open(name, "r:")
								tarexist = 1
								tarOK = 1
							except:
								tarOK = 0
								tarexist = 0
								targzexist = 0
								tarbz2exist = 0	
								
		users = User.objects.all()
		AnzahlUser = 0
		files = dbfile.objects.all()
		AnzahlFiles = 0
		for x in files:
			AnzahlFiles += 1
		for x in users:
			AnzahlUser += 1
		
	
		if request.method == 'POST':
			if 'file' in request.FILES:
				file = request.FILES['file'] 					
				filename = file['filename']
				fd = open(os.path.join('/tmp/', filename), 'wb')
		            	fd.write(file['content'])
		            	fd.close()

				# Suche nach einem Archiv
				# ZIP
				zipOK = 0
				zipexist = 0
				allfiles = os.listdir('/tmp/')
				for x in allfiles:
					name = '/tmp/'
					name += x
					if zipfile.is_zipfile(name):
						zipexist = 1
						f = open(name)
						z = zipfile.ZipFile(f)
						if z.testzip() == None:
							zipOK = 1
							
				# TAR
				tarOK = 0
				tarexist = 0
				targzexist = 0
				tarbz2exist = 0	
				for x in allfiles:
					name = '/tmp/'
					name += x
					if os.path.isfile(name):
						if tarfile.is_tarfile(name):
							try:
								tryfile = tarfile.open(name, "r:bz2")
								tarbz2exist = 1
								tarOK = 1		
							except:
								try:
									tryfile = tarfile.open(name, "r:gz")
									targzexist = 1
									tarOK = 1		
								except:
									try:
										tryfile = tarfile.open(name, "r:")
										tarexist = 1
										tarOK = 1
									except:
										tarOK = 0
										tarexist = 0
										targzexist = 0
										tarbz2exist = 0	
										
				users = User.objects.all()
				AnzahlUser = 0
				files = dbfile.objects.all()
				AnzahlFiles = 0
				for x in files:
					AnzahlFiles += 1
				for x in users:
					AnzahlUser += 1
				return render_to_response("adminpage.html", { 'users' : users, 'AnzahlUser' : AnzahlUser, 'AnzahlFiles' : AnzahlFiles, 'zipexist' : zipexist, 'zipOK' : zipOK, 'tarexist' : tarexist, 'tarOK' : tarOK, 'targzexist' : targzexist, 'tarbz2exist' : tarbz2exist, 'form' : form  })

		else:
			return render_to_response("adminpage.html", { 'users' : users, 'AnzahlUser' : AnzahlUser, 'AnzahlFiles' : AnzahlFiles, 'zipexist' : zipexist, 'zipOK' : zipOK, 'tarexist' : tarexist, 'tarOK' : tarOK, 'targzexist' : targzexist, 'tarbz2exist' : tarbz2exist, 'form' : form  })

			
		
	else:
		template = 'fileupload.html'
		#time2 = strftime("%d %b %Y %H:%M:%S")

		dir = []
		a = os.walk('/tmp/')
		for i in a:
			if os.path.isdir(i[0]):
				dir.append(i[0])	     

		form = SimpleFileForm()

		if request.method == 'POST':
			button_upload = request.POST.get("Upload", "")
	        	button_show = request.POST.get("Show", "")
	        	if button_upload:
				if 'file' in request.FILES:

		        		file = request.FILES['file'] 					
					filename = file['filename']
					selecteddir = request.POST['dirs']
					fd = open(os.path.join(selecteddir, filename), 'wb')
		            		fd.write(file['content'])
		            		fd.close()
					
					dbdatei = models.dbfile()
		                        dbdatei.filename = filename
					dbdatei.path = selecteddir
		                        dbdatei.fullpath = os.path.join(selecteddir, filename)
					dbdatei.md5 = hashlib.md5(open(dbdatei.fullpath).read()).hexdigest()
		                        dbdatei.save()		
		            		
					fd = open(os.path.join(selecteddir, filename), 'wb')
		            		fd.write(file['content'])
		            		fd.close()

		                        tmp = dbfile.objects.all().order_by('-time')
		                        tmp2 = []
		                        for i in tmp:
		                                if i.path == selecteddir:
		                                        tmp2.append(i)

		 	    		return render_to_response(template, { 'form': form, 'dir' : dir, 'tmp2' : tmp2, 'uploaded' : 'True', 'selecteddir' : selecteddir })
				else:
					selecteddir = request.POST['dirs']
					tmp = dbfile.objects.all().order_by('-time')
		                        tmp2 = []
		                        for i in tmp:
		                                if i.path == selecteddir:
		                                        tmp2.append(i)

					return render_to_response(template, { 'form': form, 'dir' : dir, 'selecteddir' : selecteddir, 'nofile' : 'True' })
		        else:
		        	selecteddir = request.POST['dirs']
		        	tmp = dbfile.objects.all().order_by('-time')
		                tmp2 = []
		        	for i in tmp:
		                                if i.path == selecteddir:
		                                        tmp2.append(i)
		     		return render_to_response(template, { 'form': form, 'dir' : dir, 'tmp2' : tmp2, 'selecteddir' : selecteddir })
		else:
			return render_to_response(template, { 'form': form, 'dir' : dir})

def registrieren(request):
    if request.method == 'POST':
        form = CreateUserForm(request.POST)
        if form.is_valid():
            ip = request.META.get('REMOTE_ADDR')
            formdata = form.cleaned_data
            username = formdata["username"]
            firstname = formdata["firstname"]
            lastname = formdata["lastname"]
            matrikelnr = formdata["matrikelnr"]
            password = formdata["password"]
            email = "platzhalter@platzhalter.de"
            try:
                user = User.objects.get(username = username)
                #eigentlich eine neue Seite
                return HttpResponse("Kann den Nutzer nicht anlegen, da er schon existiert")
            except:
                # Erstelle den user und Verbinde das Profil

		user = User.objects.create_user(username, email)
		# Setze die Standart Felder
                user.set_password(password)
                user.first_name = firstname
                user.last_name = lastname
                user.save()

		x = models.UserProfile()
		x.user = request.user

		
		#prof = user.get_profile()
		#user.save()
                
              
		
                
            return http.HttpResponse("User angelegt")  
            #return HttpResponseRedirect('fileupload.html')
        else:
            return http.HttpResponse("Fehler bei der Eingabe")
    else:
        form = CreateUserForm()
        return render_to_response("registrierung.html", {'form': form})
        
def ausloggen(request):
    logout(request)
    return http.HttpResponse("ausgelogt")
models.py

Code: Alles auswählen

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

class UserProfile(models.Model):
	matrikelnr = models.IntegerField()
	ip = models.CharField(max_length=15)
	mac = models.CharField(max_length=17)
	user = models.ForeignKey(User, unique=True)

class dbfile(models.Model):
        filename = models.CharField(max_length=200)
	fullpath = models.CharField(max_length=200)
	path = models.CharField(max_length=200)
	time = models.DateTimeField(auto_now=True)
	md5 = models.CharField(max_length=32)

	def __unicode__(self):
        	return self.question

        class Admin:
                pass
forms.py

Code: Alles auswählen

import django.newforms as forms

class CreateUserForm(forms.Form):
    username = forms.CharField(max_length=20)
    firstname = forms.CharField(max_length=20)
    lastname = forms.CharField(max_length=20)
    matrikelnr = forms.IntegerField()
    password = forms.CharField(max_length=20, widget = forms.PasswordInput())

class DeleteForm(forms.Form):
    matrikelnr = forms.IntegerField()
Antworten