Beizen Django request-Objekte
Ich versuche, Gurke Objekts ein Anfrage-Objekt so, dass ich meine Ansicht-code in einem debugger bei Gültiger Eingabe. Aber ich bin immer
Can't pickle 'lock' object: <thread.lock object at 0x93ad240>
Ich schaute durch das request-Objekt, aber nicht finden konnten einen thread.lock-Objekt an einer beliebigen Stelle in der it. Weiß jemand wo es ist? Gibt es einen besseren Weg zu gehen über diese?
- warum kann man nicht führen Sie den code direkt in einen debugger, anstatt zu versuchen, kopieren Sie alle state?
- Gut, ich versuche zu Debuggen, die Ansicht code, der ausgeführt wird, wenn eine web-Anfrage kommt. Ich denke, ich dachte, es wäre sauberer/einfacher, einfach die debug-Ansichten-Datei und übergeben Sie eine Konserven-Anforderung eher als laufen Sie alle django unter dem debugger und die Herstellung einer tatsächlichen Verbindung.
- Außerdem, ich bin nur neugierig was hier Los ist.
- Von "ohne Verbindung", meinst du, dass Sie nicht wollen, verbinden Sie Ihren Blick auf die urlsconf ?
- Dies ist nicht dringend mehr - schon eine ganze Weile her, ich ging voran und lief den wichtigsten Django-Prozess unter dem debugger und es funktioniert Prima. Jedoch, wie es scheint immer noch, es wäre schön, in der Lage zu tun, was ich versuchte. Ich würde gerne nur mein views.py Datei unter dem debugger, völlig entkoppelt vom rest der Django. Um dies zu tun, wollte ich die Gurke eine gültige HttpRequest und dann unpickle und rufen Sie die Ansicht-Methode in Frage.
- warum nicht verwenden tests framework? docs.djangoproject.com/en/dev/topics/testing/#making-requests
- Setzen Sie einen breakpoint direkt vor dem Platz in der Gurke-code, die den Fehler auslöst, und prüfen Sie die Stapel, die einheimischen, etc...?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Allgemeinen, Sie können keine Gurke HTTP-Anfragen von Objekten für jeden web-server. Beiz-Prozess nicht Gurke auf das Objekt selbst, sondern alle seine Referenzen.
Den üblichen web-server-design-Muster wird jede HTTP-Anfrage läuft seinen eigenen thread. Es muss eine Verbindung zwischen dem Faden und der HTTP-Anforderung. So, der HTTP-Objekt ist gebunden an den Lebenszyklus der web-server und nicht aus dem Webserver-context.
Was Sie wahrscheinlich tun möchten, ist zu pickle Sie den Inhalt der HTTP-request-Objekt und neu erstellen, fordert der Verwendung dieser Inhalte als Nutzlast.
Ok, für diejenigen, die interessiert sind, ich habe es geschafft, Gurke
HttpRequest
undWSGIRequest
Objekte.Erste, Sie benötigen, um monkey-patch mindestens eine Klasse
WSGIRequest
(und wahrscheinlichHttpRequest
), so dass es macht einen__reduce__(self)
Methode. Sie wäre so etwas wie:Den
reduce
Methode könnte wie folgt Aussehen:wo
METACOPY
ist eine Liste von Tasten, die Sie halten wollen, wie zB. ['REMOTE_ADDR']Ich finde es handlicher und transparenter als das payload-Methode (welche ich mit Sellerie vor).
wsgi
gespeichert sind, in den META-dictsession
ist nicht aufsammelbare zu. Einige lambda angeschlossen ist