Heim Backend-Entwicklung Python-Tutorial Zehn Punkte, auf die Anfänger beim Erlernen von Django achten sollten

Zehn Punkte, auf die Anfänger beim Erlernen von Django achten sollten

Oct 17, 2016 pm 02:40 PM

Aufgepasst, Neulinge, die gerade erst mit dem Erlernen von Django begonnen haben, hier sind zehn Punkte, die Sie beachten sollten, damit Sie Django besser lernen, Fehler reduzieren und Umwege vermeiden können~~

1. Geben Sie den Projektnamen nicht in den Referenzcode ein.
Wenn Sie beispielsweise ein Projekt mit dem Namen „Projekt“ erstellen und eine Anwendung mit dem Namen „App“ enthalten, ist der folgende Code nicht gut:

from project.app.models import Author
Nach dem Login kopieren

Der Nachteil besteht darin, dass Anwendungen und Projekte eng miteinander verbunden sind und Anwendungen nicht einfach wiederverwendbar sind. Wenn Sie den Projektnamen in Zukunft ändern müssen, müssen Sie damit rechnen.
Der empfohlene Ansatz ist:

from app.models import Author
Nach dem Login kopieren

Bitte beachten Sie, dass Sie den Projektpfad in PYTHONPATH konfigurieren müssen.
2. Codieren Sie MEDIA_ROOT und TEMPLATE_DIRS nicht fest.
Verwenden Sie nicht den folgenden Code in der Projektkonfigurationsdatei „settings.py“:

TEMPLATE_DIRS = ( "/home/html/project/templates",) 
MEDIA_ROOT = "/home/html/project/appmedia/"
Nach dem Login kopieren

Wenn Sie eine Bereitstellung durchführen Produktionsumgebung oder bei der Migration von Servern kann es zu Problemen kommen.
Es wird empfohlen, die folgende Methode zu verwenden:

SITE_ROOT = os.path.realpath(os.path.dirname(__file__)) 
MEDIA_ROOT = os.path.join(SITE_ROOT, 'appmedia') 
TEMPLATE_DIRS = ( os.path.join(SITE_ROOT, 'templates'),)
Nach dem Login kopieren

(Sie können auch abspath verwenden. Den Unterschied zu realpath finden Sie unter http://rob.cogit8.org/blog/2009 /Mai/05/django-and-relativity-updated/ )
3. Codieren Sie den Pfad statischer Dateien in der Vorlage nicht fest
Beim Verknüpfen von CSS, Javascript oder Bildern im Vorlage wird die Verwendung der folgenden Methode nicht empfohlen:

<link rel="stylesheet" type="text/css" href="/appmedia/amazing.css" />
<script type="text/javascript" src="/appmedia/jquery.min.js"></script>
Nach dem Login kopieren

Wenn Ihr Projekt erfordert, dass statische Dateien von einem anderen Server bereitgestellt werden, handelt es sich normalerweise um eine andere http-Adresse, dann müssen Sie alle /appmedia ersetzen / mit neuen Adressen und Code für die Website schreiben Es ist langweilig genug.
Die sorgenfreie Lösung besteht darin, {{ MEDIA_URL }} anstelle des hartcodierten Pfads zu verwenden:

<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}amazing.css" />
    <script type="text/javascript" src="{{ MEDIA_URL }}jquery.min.js"></script>
Nach dem Login kopieren

Wie erhalte ich die Vorlagenkontextvariable? Bitte verwenden Sie RequestContext:

return render_to_response("app/template.html", {&#39;var&#39;: &#39;foo&#39;},  context_instance=RequestContext(request))
Nach dem Login kopieren

Sie können auch aktuelle Benutzer- und andere Informationen von RequestContext abrufen

4. Schreiben Sie keinen Geschäftslogikcode in die Ansicht

Lassen Sie sich nicht verwirren. Obwohl Sie möglicherweise viele Bücher und Beispiele gelesen haben, die die Logik in „views.py“ schreiben, tun Sie dies bitte nicht. Weil dies dem Unit-Testen und der Wiederverwendung von Code nicht förderlich ist.
Wo sollte also meine Geschäftslogik platziert werden? Es wird empfohlen, es in das Modell einzufügen oder ein separates Hilfsmodul zu erstellen.
Um einen Autor aus dem Modell zu erhalten, kann natürlich der Code zum Abrufen der Autorenliste in der Ansicht platziert werden.
Vergessen Sie nicht, DEBUG bei der Bereitstellung auf False zu setzen
Wir vergessen oft, DEBUG während der Bereitstellung zu deaktivieren:

import socket  
if socket.gethostname() == &#39;productionserver.com&#39;: 
    DEBUG = False
else: 
    DEBUG = True
Nach dem Login kopieren

Eine andere Möglichkeit besteht darin, verschiedene Konfigurationsdateien zu verwenden:

#文件名:settings_debuy.py
#包含调试模式的配置信息
#http://www.pythontab.com
#使用python manage.py runserver settings=settings_debug.py来运行项目
from settings import *
DEBUG = True
#还可以配置更多在调试时使用的变量:)
Nach dem Login kopieren

6. Laden Sie das benutzerdefinierte Vorlagen-Tag nur einmal
Wenn Sie ein benutzerdefiniertes oder ein Drittanbieter-Tag verwenden müssen Vorlagen-Tags und Vorlagenfilter werden normalerweise in Vorlagen verwendet:

{% load template_tags %}
Nach dem Login kopieren

Die tatsächliche Situation ist, dass der obige Code in allen Vorlagen verwendet werden muss, die benutzerdefinierte Vorlagen-Tags und Vorlagenfilter verwenden, daher ist er nicht mehr trocken.

from django import template 
template.add_to_builtins(&#39;app.templatetags.custom_tag_module&#39;)
Nach dem Login kopieren

Bitte fügen Sie den obigen Code in ein Modul ein, das beim Start des Projekts geladen werden kann (settings.py, urls.py, models.py usw.).

Die Funktion des obigen Codes besteht darin, benutzerdefinierte Vorlagen-Tags oder Filter zu laden, wenn das Projekt gestartet wird. Sie können überall in der Vorlage verwendet werden, ohne dass {% Load template_tags %} erforderlich ist.
7. Konfigurieren und verwenden Sie URLs entsprechend
Konfigurieren Sie nicht alle URLs in einer urls.py-Datei, wie zum Beispiel:

urlpatterns = patterns(&#39;&#39;, 
  url(r&#39;^askalumini/question/$&#39;,&#39;.....registerInstitution&#39;,name=&#39;iregister&#39;), 
  url(r&#39;^askalumin/answer/$&#39;,&#39;someview.....&#39;,name=&#39;newmemberurl&#39;), 
  url(r&#39;^institution/member/$&#39;,&#39;someview.....&#39;,name="dashboardurl"), 
  url(r&#39;^institution/faculty/$&#39;,&#39;editInstitute&#39;,name="editinstituteurl"), 
  url(r&#39;^memeber/editprofile/$&#39;,&#39;editProfile&#39;,name="editprofileurl"), 
  url(r&#39;^member/changepassword/$&#39;,&#39;changePassword&#39;,name="changepasswordurl"), 
  url(r&#39;^member/forgotpassword/$&#39;,&#39;forgotPassword&#39;,name="forgotpasswordurl"), 
  url(r&#39;^member/changepicture/$&#39;,&#39;changePicture&#39;,name="changepictureurl"), 
  url(r&#39;^member/logout/$&#39;,&#39;memeberlogout&#39;,name="logouturl"), , 
)
Nach dem Login kopieren

Die empfohlene Methode besteht darin, jede zu konfigurieren Anwendung Die URLs sind in ihren jeweiligen urls.py konfiguriert, was die Wiederverwendung der Anwendung in verschiedenen Projekten erleichtert:

urlpatterns = patterns(&#39;&#39;, 
  (r&#39;^$&#39;, include(&#39;institution.urls&#39;)), 
  (r&#39;^institution/&#39;, include(&#39;institution.urls&#39;)), 
  (r&#39;^askalumini/&#39;, include(&#39;askalumini.urls&#39;)), 
  (r&#39;^member/&#39;, include(&#39;member.urls&#39;)), 
)
Nach dem Login kopieren

Das Folgende ist die urls.py der Anwendung von askalumini:

urlpatterns = patterns(&#39;askalumini.views&#39;, 
  url(r&#39;^$&#39;,&#39;askHome&#39;,name=&#39;askaluminiurl&#39;), 
  url(r&#39;^questions/(?P<questionno>\d+)/$&#39;,&#39;displayQuestion&#39;,name=&#39;askquestiondisplay&#39;), 
  url(r&#39;^askquestions/$&#39;,&#39;askQuestion&#39;,name=&#39;askquestionurl&#39;), 
  url(r&#39;^postcomment/$&#39;,&#39;postComment&#39;,name="askquestioncomment") 
)
Nach dem Login kopieren

Wie gerade erwähnt, sollte der statische Dateipfad nicht fest codiert sein und die URL-Verarbeitungsmethode sollte nicht fest codiert sein. Andernfalls sind beim Ändern einer Adresse mehrere Änderungen erforderlich. Sie können einige URL-Funktionen verwenden damit umzugehen.

In /project/askalumini/urls.py ist für jede URL ein Name definiert, der uns dabei helfen kann, URLs in Ansichten, Vorlagen und Modellen effektiv zu verwalten, anstatt sie hart zu codieren.
Um die Eindeutigkeit des Namens sicherzustellen, folgen Sie bitte der Konvention, die URL als / zu benennen.
Zum Beispiel gibt es den folgenden Code in der Datei „views.py“:

HttpResponseRedirect("/askalumini/questions/54")
Nach dem Login kopieren

Bitte ändern Sie ihn in:

from django.core.urlresolvers import reverse 
HttpResponseRedirect(reverse(&#39;askquestiondisplay&#39;,kwargs={&#39;questionno&#39;:q.id}))
Nach dem Login kopieren

Modelle verwenden in das Modell .permalink decorator zum Formatieren der URL:

@models.permalink 
def get_absolute_url(self): 
return (&#39;profileurl2&#39;,(),{&#39;userid&#39;: self.user.id})
Nach dem Login kopieren

Verwenden Sie das URL-Tag in der Vorlage anstelle der Hardcodierung:

{% url askquestiondisplay 345 %} 
<a href="{% url askquestiondisplay 345 %}"> Ask Question </a>
Nach dem Login kopieren

8,调试
调试通常会借助一些第三方工具来获得更多的运行时信息。
一个请求执行了多少句SQL?花了多长时间?
调用的哪个模板?客户端设置了什么COOKIE?SESSION呢?。。。
你可以使用django-debug-toolbar查看上面甚至更多的信息
另一个工具是Werkzeug debugger,它可以在错误页面打开python shell,让你更方便的跟踪错误信息
还有pdb,一个强大的调试工具:http://ericholscher.com/blog/2008/aug/31/using-pdb-python-debugger-django-debugging-series-/
9,了解pinax备用
django最大的优点是代码重用,DRY,pinax就是这样一个平台,包含了许多可拿来直接使用的代码,比如openid,电子邮件验证等等。请访问:http://pinaxproject.com/
10,了解一些有用的第三方应用
1)数据库升级工具
什么是数据库升级工具?你运行了syncdb,运行了一年之后,对模型做了更改,添加了字段,删除了字段,要再运行syncdb吗?或者ALTER TABLE ...?
django-evolutions可以帮你完成上面的事情,但它好像不够强壮:http://code.google.com/p/django-evolution/
South能很强壮地完成上面的事情,但是需要学学怎么用:http://south.aeracode.org/
2)模板系统
django自带的模板系统是可以替换的,并且各自有优缺点。
template-utils增强了模板的比较标签等功能 ,并提供其他的一些实用特性
Jinja是一个完整的第三方模板系统,可以替换默认模板系统,它提供了许多优越的特性
3)第三方应用
django command extensions提供了很多实用的命令行功能:
shell_plus加载所有django模型
runserver_plus整合了Werkzeug调试工具
生成模型图表,你可以展示给你的老板
…… 

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Apr 01, 2025 pm 05:09 PM

Lösung für Erlaubnisprobleme beim Betrachten der Python -Version in Linux Terminal Wenn Sie versuchen, die Python -Version in Linux Terminal anzuzeigen, geben Sie Python ein ...

Wie kann ich die gesamte Spalte eines Datenrahmens effizient in einen anderen Datenrahmen mit verschiedenen Strukturen in Python kopieren? Wie kann ich die gesamte Spalte eines Datenrahmens effizient in einen anderen Datenrahmen mit verschiedenen Strukturen in Python kopieren? Apr 01, 2025 pm 11:15 PM

Bei der Verwendung von Pythons Pandas -Bibliothek ist das Kopieren von ganzen Spalten zwischen zwei Datenrahmen mit unterschiedlichen Strukturen ein häufiges Problem. Angenommen, wir haben zwei Daten ...

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer-Anfänger-Programmierbasis in Projekt- und problemorientierten Methoden? Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer-Anfänger-Programmierbasis in Projekt- und problemorientierten Methoden? Apr 02, 2025 am 07:18 AM

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer -Anfänger für Programmierungen? Wenn Sie nur 10 Stunden Zeit haben, um Computer -Anfänger zu unterrichten, was Sie mit Programmierkenntnissen unterrichten möchten, was würden Sie dann beibringen ...

Wie kann man vom Browser vermeiden, wenn man überall Fiddler für das Lesen des Menschen in der Mitte verwendet? Wie kann man vom Browser vermeiden, wenn man überall Fiddler für das Lesen des Menschen in der Mitte verwendet? Apr 02, 2025 am 07:15 AM

Wie kann man nicht erkannt werden, wenn Sie Fiddlereverywhere für Man-in-the-Middle-Lesungen verwenden, wenn Sie FiddLereverywhere verwenden ...

Was sind reguläre Ausdrücke? Was sind reguläre Ausdrücke? Mar 20, 2025 pm 06:25 PM

Regelmäßige Ausdrücke sind leistungsstarke Tools für Musteranpassung und Textmanipulation in der Programmierung, wodurch die Effizienz bei der Textverarbeitung in verschiedenen Anwendungen verbessert wird.

Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen ohne Serving_forver () an? Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen ohne Serving_forver () an? Apr 01, 2025 pm 10:51 PM

Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen an? Uvicorn ist ein leichter Webserver, der auf ASGI basiert. Eine seiner Kernfunktionen ist es, auf HTTP -Anfragen zu hören und weiterzumachen ...

Wie erstelle ich dynamisch ein Objekt über eine Zeichenfolge und rufe seine Methoden in Python auf? Wie erstelle ich dynamisch ein Objekt über eine Zeichenfolge und rufe seine Methoden in Python auf? Apr 01, 2025 pm 11:18 PM

Wie erstellt in Python ein Objekt dynamisch über eine Zeichenfolge und ruft seine Methoden auf? Dies ist eine häufige Programmieranforderung, insbesondere wenn sie konfiguriert oder ausgeführt werden muss ...

Was sind einige beliebte Python -Bibliotheken und ihre Verwendung? Was sind einige beliebte Python -Bibliotheken und ihre Verwendung? Mar 21, 2025 pm 06:46 PM

In dem Artikel werden beliebte Python-Bibliotheken wie Numpy, Pandas, Matplotlib, Scikit-Learn, TensorFlow, Django, Flask und Anfragen erörtert, die ihre Verwendung in wissenschaftlichen Computing, Datenanalyse, Visualisierung, maschinellem Lernen, Webentwicklung und h beschreiben

See all articles