服務器配置
安裝django
sudo apt-get install python-django -y
安裝mysql(可選)
也可以直接使用sqlite
sudo apt-get install mysql-server-5.6
sudo apt-get install mysql-client-5.6
sudo apt-get install python-mysqldb
測試項目Hello World
在我們的項目根目錄下執行:
django-admin startproject HelloWorld
HelloWorld即是我們的項目名稱。截圖后的目錄結構:
xl@xl-Z270-HD3:~/file/code/HelloWorld$ tree
.
└── HelloWorld
├── HelloWorld
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
2 directories, 5 files
各個文件的作用:
- HelloWorld: 項目的容器
- manage.py: 命令行工具,用於和Django交互
- HelloWorld/init.py:空文件,告訴python,該目錄是一個Python包
- HelloWorld/settings.py : 對該項目的配置文件
- HelloWorld/urls.py : 該項目的url聲明
- HelloWorld/wsgi.py : 服務器入口
然后,運行服務器:
python manage.py runserver
當服務器運行成功后,就可以訪問http://127.0.0.1:8000查看'Welcome to Diango'界面。
添加自己的app
一個Django project下可以有多個App,而一個App就是一個具體的Web應用程序,用來實現具體的功能和完成具體的事項。
可以通過manage.py快速創建一個app:
python manage.py startapp testapp
這樣就創建了一個名為testapp的Django App,看看當前目錄的變化,在project根目錄下會多出一個testapp的目錄,其目錄結是:
xl@xl-Z270-HD3:~/file/code/HelloWorld/HelloWorld/testapp$ tree
.
├── admin.py
├── apps.py
├── __init__.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
└── views.py
1 directory, 7 files
其中:
- admin.py:用於設置 Django 自帶的強大管理后台;
- apps.py:聲明了這個的 App 信息;
- models.py:用於定義數據模型(數據庫表);
- tests.py:用於單元測試;
- views.py:用於定義 App 的視圖,也就是業務函數。
這包含了一個 Web 應用的后台管理、數據庫定義、邏輯視圖,在結合項目的路由映射,就是一個 Django App 最基本的結構。
migrations 文件夾目前是一個空的文件夾,其中會記錄應用的數據模型遷移的情況。
然后我們需要使用manage.py文件的migrate 和 makemigrations 命令,創建一些默認的數據庫表:
python manage.py migrate
運行命令,會顯示將會對數據庫進行很多個表的實例化和遷移.
然后,我們將testapp添加到HelloWorld項目的App列表中,即在settings.py文件中找到INSTALLED_APPS,將testapp加到最后面。
接着,可以使用 makemigrations 命令來檢測項目中數據模型的數據遷移變化:
python manage.py makemigrations testapp
創建超級用戶
我們可以為項目創建一個超級管理員,通過這個賬戶,可以快速使用 Django 強大的后台功能,對數據模型進行管理:
python manage.py createsuperuser
根據提示輸入用戶名、郵箱和密碼,一個超級用戶就創建好了。我們可以運行項目,訪問http://127.0.0.1:8000/admin路徑看看:
python manage.py runserver
可以使用剛剛創建的管理員賬戶登錄。
修改我們的網頁
修改視圖文件
編輯testapp目錄下views.py,加入以下內容:
from django.http import HttpResponse
def hello(request):
return HttpResponse("Hello world!")
在這里,我們定義了一個hello視圖。
注意, 一個視圖就是Python的一個函數。這個函數第一個參數的類型是HttpRequest;它返回一個HttpResponse實例。為了使一個Python的函數成為一個Django可識別的視圖,它必須滿足這兩個條件。
進行URL配置
為了告訴服務器我們配置的視圖,需要進行URL配置。在HelloWorld目錄下的urls.py中添加:
from testapp.views import hello
urlpatterns = [
...
url(r'^hello/$', hello),
]
這時,我們再重新啟動服務器,訪問 http://127.0.0.1:8000/hello/,就可以看到不一樣的結果了。
編寫一個動態網頁
上面的例子每次返回的都是一樣的內容,它可以算是一個靜態網頁。但其實使用python每次返回不同的內容,就可以算是動態網頁了。
我們把views.py中的添加一個視圖:
import time
def current_time(request):
return HttpResponse("Current time is: "+time.strftime('%Y-%m-%d %H:%M:%S'))
同樣在urls.py中配置URL:
from testapp.views import current_time
urlpatterns = [
......
url(r'^current_time/$', current_time),
]
這時,我們再重新啟動服務器,訪問 http://127.0.0.1:8000/current_time/,就可以看到每次都不一樣的網頁了。
數據庫
與數據庫相關的代碼一般寫在models.py中,Django 支持 sqlite3, MySQL, PostgreSQL等數據庫,只需要在settings.py中配置即可,不用更改models.py中的代碼。
創建數據表
我們打開 testapp/models.py 文件,修改其中的代碼如下:
from django.db import models
class Test(models.Model):
a = models.CharField(max_length=30)
b = models.IntegerField()
然后,同步一下數據庫。(默認使用sqlite3數據庫,無需做任何配置)
先進入到manager.py所在的文件夾下,輸入以下命令:
# Django 1.6.x 及以下
python manage.py syncdb
# Django 1.7 及以上的版本需要用以下命令
python manage.py makemigrations
python manage.py migrate
Django生成了一系列的表,也包括我們在testapp/models.py中定義的testapp_test這個表。
插入和查詢數據
作為測試,我們可以調起Django的shell:
xl@xl-Z270-HD3:~/file/code/HelloWorld/HelloWorld$ python manage.py shell
Python 2.7.15rc1 (default, Nov 12 2018, 14:31:15)
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from testapp.models import Test
>>> Test.objects.create(a="zhangsan", b=24)
<Test: Test object>
>>> Test.objects.get(a="zhangsan")
<Test: Test object>
>>>
注意這里使用.objects.get() 方法查詢出來的對象都是顯示一個結構體。
具體操作可以參考https://code.ziqiangxuetang.com/django/django-models.html
