1. 程式人生 > >PyCharm 開發Django ,錯誤彙總

PyCharm 開發Django ,錯誤彙總

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                       

近期略微接觸了一下Django。在學習的過程中可謂是坎坎坷坷,遇到了很多的問題。
下面就來談一談我對Django的一點點的見解。


Django專案的建立

使用PyCharm來開發Django專案是非常的簡單的。建立專案的時候選中Django專案,然後在more settings中寫上應用的名稱。這樣就算是建立好了一個全新的專案。
如下圖:
這裡寫圖片描述

這裡寫圖片描述 雖然這裡面有一個MyDjango的子資料夾,但是這個資料夾的存在是MyDjango專案的支援檔案。我們最好是在應用資料夾MyBlog下完成我們的業務。這樣更容易進行管理。



在這個過程中,我就遇到了讓我很是難忘的問題。

問題一:
沒有MyBlog資料夾.
這個問題的出現是因為你沒有分清楚專案和應用之間的區別。我剛開始的時候,就犯了這個錯誤。

應用是存在於專案內部的實現了一系列功能的模組。是做為子集而存在的。

 

django-admin startproject projectname//建立一個Django專案
  django-admin startapp appname// 建立一個django的應用

這樣就好了。當然這一個步驟使用PyCharm更加的簡單。在這裡就不過多敘述了。

問題二:
初始訪問就失敗了.
這一點,我們可以這麼來想,訪問一個伺服器上面的一個路徑,首先這臺伺服器上必須要有這個應用程式吧。所以我們需要將這個應用部署到伺服器上。
在這裡開發伺服器上同樣也要被部署上相關的應用,而這個應用就是我們剛才建立的那個應用MyBlog.所以要在settings.py中對INSTALLED_APP進行應用名稱的新增。

# Application definitionINSTALLED_APPS = [    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',    'MyBlog',]
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

下面我在提供一個多圖的PyCharm開發Django專案的連結,總結的很詳細。
圖解 PyCharm+Django

Django 常用的命令

這裡簡單的介紹幾個常用的命令。

 

django-admin startproject projectname //建立一個django專案

   

django-admin startapp appname // 建立一個django專案的應用

   

python manage.py runserver  //執行專案,並將專案部署到開發伺服器上面

   

python manage.py syncdb // 這一個過時了,待會說

   

python manage.py makemigrations
  python manage.py migrate這兩個需要配合使用,目的是對資料庫中相關表結構的建立以及同步操作

   

python manage.py createsuperuser // 建立一個超級管理員,用於後臺的管理任務

urls.py的配置

這個檔案就是一個對映檔案,用於將我們在瀏覽器中輸入的url對映到相關的檢視展示函式上。有靜態對映和動態對映之區分。
靜態對映的方式:
    這裡主要是靜態的url的對映的處理。共有如下幾種方式:

#    1:使用模組的方式引入from MyBlog.views import *        url(r'^showStudents/$',showStudents),        url(r'^PurpleRing1/$',purpleRing1),        url(r'^PurpleRing2/$',purpleRing2),
   
  • 1
  • 2
  • 3
  • 4
  • 5
#  2:使用字串的方式連線 urlpatterns = ['MyBlog.views',            url(r'^admin/', admin.site.urls),            url(r'^MyBlog/$','sayHello'),            url(r'^showStudents/$','showStudents'),            url(r'^PurpleRing1/$','purpleRing1'),            url(r'^PurpleRing2/$','purpleRing2'),        ]
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
#    3:方式2的變種 urlpatterns = [            url(r'^admin/', admin.site.urls),                            url(r'^MyBlog/$','MyBlog.views.sayHello'),            url(r'^showStudents/$','MyBlog.views.showStudents'),            url(r'^PurpleRing1/$','MyBlog.views.purpleRing1'),            url(r'^PurpleRing2/$','MyBlog.views.purpleRing2'),        ]
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

動態url的匹配:
這裡主要是利用正則表示式的方式來實現的,如下面的幾個小例子。

# 1:簡單形式url(r'^MyBlog/index/\d{2}/$','MyBlog.views.index')        就把url形式為MyBlog/index/數字長度為兩個  型別的對映到了MyBlog.views.index 函式上了
   
  • 1
  • 2
  • 3
 2:複雜點的  url(r'^MyBlog/index/(?P<id>\d{2})/$)','MyBlog.views.index')        就是url連結為MyBlog/index/數字  型別的網址才會被對映到index對應的方法上去。並展現出對應的檢視        對應的index方法宣告:def index(request,id):# 也就是說url中的那個分組中的引數要在這裡保持一致
   
  • 1
  • 2
  • 3
  • 4

模板渲染相關

我們的專案中需要有一個名稱固定為templates 的資料夾,用於存放我們的頁面檢視的模板檔案。當有使用者請求時,底層就會通過MVC模式將模板檔案渲染並展示給使用者相關的頁面。

渲染的方法有靜態渲染,也有動態渲染(其實也不算是動態渲染了,只是加進了模板變數和模板標籤等而已)。

先來看一個簡單的渲染方法

 

哦,對了。忘了說了。渲染的程式碼邏輯都是應該在views.py中進行實現的。

from django.http import HttpResponsefrom django.template import loader,Context# 方式一(有冗餘操作):def purpleRing(request):    # 載入一個templates資料夾下的模板檔案,這裡的templates資料夾名稱固定    t = loader.get_template('PurpleRing.html')    C = Context({})    return HttpResponse(t.render(C))
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

這種方式略顯繁瑣,所以引入下面的較為簡單的方式。

# 方式二from django.shortcuts import render_to_responsedef purpleRing(request):    return render_to_response('PurpleRing.html','{}')
   
  • 1
  • 2
  • 3
  • 4
  • 5

第二個引數是一個字典型別的資料,如果模板中沒有使用到模板變數,或者模板標籤。就讓它為空即可。

下面來看一看使用模板變數以及模板標籤的渲染吧。

  • 模板變數{{模板變數名}}
    在模板檔案中在用得到變數的地方使用模板變數的方式進行新增。
    然後在render_to_response的第二個引數(一個字典)中,我們就可以使用這個模板變數的key為其指定value的值。

     

    注意:
      模板變數可以使用額=的資料型別可以是字典,列表,甚至是一個類,並且使用類的時候
          我們應該可以直接使用其成員變數,這很容易理解了。還可以直接按照呼叫類的成員變數的
          形式呼叫其內部的方法,但是注意這時使用到的方法不能帶引數,而且需要並且一定要有一個返回值

  • 模板標籤{% 標籤內容%}

仍舊是看幾個小例子吧。

1:{% if statement%} # if 後面不能加括號        <li>XX:{{標籤變數}}</li>        {% else %}        <li>XX:{{標籤變數}}</li>        {% endif %}    2:{% for XX in XXS %}        <li>XX:{{標籤變數}}</li>        {% endfor %}
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

下面來看一個較為複雜的也較為全面的渲染檔案的寫法。

urls.py中的對映:

 url(r'^showStudents/$',showStudents),
   
  • 1

views.py中:

from django.shortcuts import *from django.http import HttpResponsefrom django.template import loader,Contextdef showStudents(request):    list = [{id: 1, 'name': 'Jack'}, {id: 2, 'name': 'Rose'}]    return render_to_response('template_student.html',{'students': list})
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

template_student.html:

 <!DOCTYPE html> <html> <head>     <title></title> </head> <body>     <ul>         {% for student in students %}         <li>            id:{{ student.id }},姓名:{{ student.name }},age: {{ student.age }}        </li>        {% endfor %}    </ul></body></html>
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Django中關於資料庫的使用

django是一個優秀的web框架,所以它必然支援很多型別的資料庫。下面我們以sqlite3為例,看一下其書寫:

# Database# https://docs.djangoproject.com/en/1.9/ref/settings/#databasesDATABASES = {    'default': {        'ENGINE': 'django.db.backends.sqlite3',        'NAME': 'MyBlog.db',        'USER':'',        'PASSWORD':'',        'HOST':'',        'PORT':'',    }}
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
 

我們需要知道的是engine代表資料庫型別就行。至於NAME就是我們在資料庫中的對應的資料庫名稱。

也許,你會想使用MySQL資料庫,當然,這也是沒問題的,我們需要更改的也就對應著engine,name,user,password,port 等等的設定,接觸過web開發的都很清楚了。就不多說了。

下面談點實際的,那就是遇到了資料庫相關的錯誤了。怎麼辦?

錯誤一:
django.db.utils.OperationalError: unable to open database file

這個問題的出現有兩種情況:
一:
             沒有安裝連線從資料庫的驅動檔案,解決方法。安裝一下相關的connection 檔案,比如jar什麼的都行,在PyCharm下很方便。
二:
        這是檔案許可權被禁止而引起的。
        在Linux下,修改一下許可權即可。即chmod + 775 + 資料庫檔名稱。

        但是今天我們要說的是怎麼在Windows下怎麼做。

# django < 1.7 時:    python manage.py syncdb# django > 1.7 時:    python manage.py makemigrations    python manage.py migrate
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

錯誤二:
django.db.utils.OperationalError: no table named XXX.這是因為我們雖然在models.py中建立了相關的物件,但是資料庫中還沒有得到同步,所以訪問一個不存在的東西,肯定是會報錯的。所以要對資料庫完成一次同步操作。

# django < 1.7 時:    python manage.py syncdb# django > 1.7 時:    python manage.py makemigrations    python manage.py migrate
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

總結

上面的都是我在學習的過程中親身遇到的一些問題,貌似能遇到這麼多問題,也是一種幸運。這樣才讓我獲得了更多的經驗嘛。
真好!

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述