django+sqlite3進行web開發(一)


服務器配置

安裝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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM