循序漸進Python3(十二) --2--  web框架之django簡單實現oracle數據庫操作


在 Django 中構建 Oracle 數據庫支持的 Web 應用程序

了解如何配置 Django 以便與 Oracle 數據庫交互,並使用 ORM 進行數據庫連接。

            產能在軟件開發環境中意味着及時完成工作的能力。開發人員經常發現自己在重復執行相同的任務,這無疑會降低其產能。這是框架能夠派上用場的地方:使用適當的框架,您可以將重點放在項目需求上,而不是處理低級、棘手的實施細節。
             Django 是基於 Python 的 Web 應用程序框架,最初旨在簡化數據庫驅動的、面向新聞的 Web 應用程序的開發。其后,它已經發展成功能完備的 Web 框架,經常用來簡化數據庫支持的復雜 Web 應用程序的開發。
             Django 的對象關系映射器 (ORM) 位於框架的中心,介於數據模型(您在 django.db.models.Model 類之上構建的 Python 類)和基礎關系數據庫對象之間。定義數據模型之后,您將能夠通過映射到基礎數據庫中的對象的 Python 對象,來創建、檢索、更新以及刪除數據庫數據。需要強調的是,除了 PostgreSQL、MySQL 和 SQLite 之外,Django 還正式支持 Oracle 數據庫,可讓您使用 ORM 特性訪問和操作 Oracle 數據庫數據。
入門
             假設您已安裝 Django,現在可以嘗試創建您的第一個 Django 項目,並在其中創建一個應用程序。
在 Django 中,項目包括特定網站的配置和應用程序。因此,單個項目實際上可能包括多個應用程序。然而,為了簡單起見,在此創建的項目只包括一個應用程序。
首先,您可能要創建一個用於存儲 Django 項目的文件夾,從操作系統提示符進入此文件夾,然后發出以下命令:
python django-admin.py startproject myproj
結果,應該顯示 myproj 文件夾及其內含的以下四個文件:__init__.py、manage.py、settings.py 以及 urls.py。這四個文件的每一個都在項目中起着特定作用。
  • 包括 __init__.py 是為了讓此目錄成為 Python 程序包,以便您能夠通過點符號引用項目的各部分;例如,myproj.settings。
  • manage.py 表示與上述 django-admin.py 提供相同命令但旨在用於此特定項目的命令行實用程序。
  • settings.py 是包含項目設置的配置文件。在此,您可以指定數據庫連接信息、時區和語言代碼、有關項目中所安裝的應用程序的信息,以及一些其他設置。
  • urls.py 又稱為 URLconf,是包含將 URL 模式映射到 Python 回調函數的 Python 代碼的配置文件。

             您可以看到,即使 Django 項目的配置文件也是以 Python 源代碼文件的形式提供。此方法被證明很有優勢,因為它使您能夠動態指定設置和/或從其他配置文件中導入設置。
             現在您已創建項目,可以繼續下一環節,在此項目內創建一個應用程序。為此,進入先前由 django-admin.py 生成的 myproj 文件夾,並發出以下命令:
             python  manage.py startapp myapp
在 Linux 上,您可能需要發出:
chmod +x manage.py
./manage.py startapp myapp
             上述命令應該生成文件夾 myapp 及其內含的以下六個文件:__init__.py、admin.py、apps.py、models.py、views.py 以及 tests.py。同樣,__init__.py 用於使此目錄成為 Python 程序包。Tests.py 可用於為應用程序構建測試套件。admin.py用於為應用程序創建admin測試。此外,您將使用其余的兩個文件分別定義應用程序的模型和視圖:
  • models.py 用於包含模型(您在 django.db.models.Model 類之上構建的 Python 類),其中每個模型都映射到一個數據庫表。
  • views.py 用於包含視圖(Python 函數),其中每個視圖或者返回 HttpResponse 對象(內容將顯示在所請求頁面上),或者引發 HTTP 異常。

             下一步是將新創建的應用程序與項目相關聯。為此,您需要編輯 myproj 文件夾中的 settings.py 文件,將字符串“myproj.myapp”追加到 INSTALLED_APPS 字節組中,如下所示:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'myproj.myapp' #新版本只要填寫 myapp 即可
)
             您已完成了應用程序主干的構建。然而,在可以查看應用程序是否正常工作之前,需要執行一些額外步驟。當然,這些步驟可能會 有所不同,具體取決於您希望應用程序執行的操作。例如,如果您要構建不與數據庫交互的簡單應用程序,則不需要將數據庫信息放在 settings.py 配置文件以及設計數據模型中。但在大多數情況下,您至少需要執行以下五個步驟:
  • 在 settings.py 中指定數據庫信息
  • 創建模型
  • 創建模板
  • 創建視圖
  • 在 urls.py 中配置 URL 模式
         在繼續上述步驟之前,讓我們看一下 Django 應用程序的高級視圖,以便您可以更好地了解 Django 中的組件如何工作。下圖示意性地顯示了 Django 應用程序如何工作以滿足用戶請求。

根據此圖中的圖示,工作方式如下:

  1. 用戶輸入支持 Django 的站點的 URL 或在此站點的已加載頁面上執行操作,從而將請求發送到托管此站點的 Web 服務器。
  2. Django 的 URL 調度程序遍歷 urls.py 文件中的 URL 模式,並選擇第一個與用戶請求的 URL 匹配的模式,然后調用與所發現模式相關聯的視圖(Python 回調函數)。
  3. 視圖使用數據模型獲得數據庫數據,然后加載指定模板(已嵌入特殊模板標記的 HTML 頁面;它類似於 Java 中的 JavaServer Page),並向其傳遞上下文(包括映射到模板變量名稱的已獲得數據)。
  4. 最后,視圖返回由已呈現模板填充的 HttpResponse 對象,如果出現錯誤,則返回 HTTP 異常。

 

          您可以看到,Django 基於將 Web 應用程序邏輯分為模型、視圖和模板的概念,因此有效地將業務邏輯和展示分離開來。通常,這類似於當今許多其他 Web 框架中使用的模型-視圖-控制器 (MVC) 范例。然而,在 Django 中,視圖更像控制器,介於模型和模板之間。而 Django 模板更接近於 MVC 視圖,因為這些模板負責使用從模型中獲得的數據生成適當的用戶界面。

         現在您已掌握 Django 的概念,讓我們繼續在本部分開頭啟動的項目,構建一個與 Oracle 數據庫交互的簡單應用程序。

 

配置 Django 以便與 Oracle 數據庫交互

         首先,您必須安裝對應版本的cx_Oracle。 下載地址: https://pypi.python.org/pypi/cx_Oracle 
         您必須先告訴 Django 如何連接到數據庫,才能利用 Django 的數據庫相關特性。您可以通過在項目的 settings.py 配置文件中配置數據庫相關設置來執行此操作。對於在上一部分開頭創建的項目,您需要編輯 django-admin.py 生成的 myproj 目錄中的 settings.py。
在文本編輯器中打開 settings.py 文件,並根據您的數據庫編輯與數據庫相關的設置。例如,您可能按如下方式編輯它們:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.oracle',
'NAME': 'devdb',
'USER': 'hr',
'PASSWORD': 'hr',
'HOST': '192.168.191.3',
'PORT': '1521',
}
}
上述方式假設您在數據庫中安裝了 HR(安裝腳本見附件) 演示模式並解除了鎖定。然而,在實際項目中,您很可能會使用針對特定應用程序設計的自定義模式。需要注意的是,Django 可以省去您自己創建基礎表的麻煩。完成數據模型的構建之后,您可以運行  python manage.py migrate  命令以自動創建數據庫表 — 針對 models.py 文件中的每個數據模型創建一個數據庫表。但為了簡單起見,本文中的示例將使用 HR 演示模式中已經存在的表。

 
現在您已指示 Django 與特定 Oracle 數據庫交互,可以繼續構建數據模型。
與模型的對象關系映射
如前所述,Django 支持與模型的對象關系映射,其中每個模型映射到單個數據庫表,並表示子類為 django.db.models.Model 標准類的 Python 類。
以下示例說明如何針對現有表定義模型。在此示例中,您將使用 HR 的 employees 表,僅針對此表的選定字段定義模型字段。在 myproj/myapp 目錄中打開 models.py 文件並進行編輯,添加 employees 類,如下所示:
from __future__ import unicode_literals

from django.db import models
# Create your models here.
class employees(models.Model):
employee_id = models.IntegerField(primary_key=True)
first_name = models.CharField(max_length=20, null = True)
last_name = models.CharField(max_length=25)
email = models.CharField(max_length=25)
class Meta:
db_table = "employees"

      請注意,此處使用了一些模型字段選項。通過設置 primary_key = True,可顯式指定此字段是模型的主鍵。
max_length 是 CharField 這一字符串字段所需的參數。如果將可選的 null 參數設置為 True,即表示告訴 Django 將空
值作為 NULL 保存到數據庫中。默認情況下,此參數設置為 False。要查看字段選項和字段類型的完整列表,您可以參閱
Django 文檔中的 Model 字段參考頁面。
      在上述示例中,另一個需要注意的事項是類 Meta 的使用,您可以通過此類為模型提供元數據選項。在此特定示
例中,您使用 db_table 選項顯式指定模型要映射到的表的名稱。實際上,默認情況下,Django 假設表的名稱由模型類的
名稱和應用程序名稱組成(通過下划線 (_) 符號分隔)。因此,在此特定示例中,Django 將查找名為 myapp_employees
的表。當然,db_table 並不是您可用於模型內部類 Meta 的唯一選項。您可以在 Django 文檔的 Model Meta 選項頁面上
查看可用的 Meta 選項列表。
      此處討論的示例很簡單,因為它僅顯示到單個數據庫表的映射。但實際上,您通常必須處理一組通過外鍵約束相
互關聯的基礎數據庫表。為了解決此問題,Django 提供了 ForeignKey 字段類型,可讓您定義表示多對一關系的模型字段

      幸運的是,HR 演示模式僅包含一組通過外鍵約束相互關聯的表。例如,您可能選擇 departments 表(其 manage
r_id 字段是 employees 表中 employee_id 的外鍵),並定義以下模型(將其添加到 models.py 文件中):
class departments(models.Model):
department_id = models.IntegerField(primary_key=True)
department_name = models.CharField(max_length=30)
manager = models.ForeignKey(employees, null = True)
class Meta:
db_table = "departments"
 
        
                  看一下上述模型定義,您可能已經注意到,它針對外鍵模型字段使用名稱 manager,而不是實際在 departments
表中使用的 manager_id。實際上,在模型中使用的 manager 字段引用相應的 employees 對象,而非此對象的 
employee_id 字段。當外鍵字段名稱要引用基礎表中的相應列時,Django 會隱式地將 _id 追加到此名稱中。然而,在某
些情況下,表中外鍵字段的名稱結尾可能不包含 _id。如果是這種情況,您可以使用外鍵模型字段的 db_column 參數顯式
指定表列名稱。雖然在此特定示例中無需如此,但您可以使用以下語法在 departments 表中顯式指定外鍵列的名稱:
manager = models.ForeignKey(employees, db_column = 'manager_id', null = True)
除了上述通過 ForeignKey 定義的多對一關系之外,Django 還支持一對一和多對多關系,您可以在模型中分別通過 
OneToOneField 和 ManyToManyField 字段來定義。
 
使用數據庫抽象 API
                   完成模型構建之后,您可以繼續下一環節,構建將使用這些模型的視圖。您可以在此使用 Django 數據庫抽象 API 創建、檢索、更新以及刪除映射到基礎數據庫中的對象的 Python 對象(模型)。
讓我們借助在上一部分中創建的模型,創建一個將從 employees 和 departments 數據庫表中獲取數據的簡單視圖。在 myproj/myapp 目錄中,打開 views.py 文件並進行編輯,如下所示:
from django.shortcuts import render
 
        
# Create your views here.
from django.template import Context, loader
from django.http import HttpResponse
from myapp.models import employees, departments
 
def index(request):
department_list = departments.objects.exclude(manager__employee_id__exact = None).order_by('manager__employee_id')
tmpl = loader.get_template("index.html")
cont = Context({'departments': department_list})
return HttpResponse(tmpl.render(cont))
 

                  在此,您添加了一個簡單視圖(實際上是一個名為 index 的函數),它將填充部門列表 (department_list),其中僅包括那些具有經理的部門(這意味着,必須填寫基礎表中的 manager_id 字段)。然后,該視圖加載 index.html 模板(將在“創建表示層”部分中討論),並向其傳遞 department_list 以便呈現。最后,向 Django 返回包含 HttpResponse 對象的已呈現頁面。

                  在此,最有趣的部分是從 departments 模型中獲取數據。請注意 departments 模型類的 objects 屬性的用法。通過此屬性,您可以訪問 models.Manager 對象(不要將它與 departments 模型中定義的 manager 字段混淆)。models.Manager 對象會附加到模型對象中,提供可讓您在模型的基礎表中查詢數據的方法。這些方法將返回一個 QuerySet 對象,其中包含以模型對象的形式檢索的數據庫數據。QuerySet 對象還提供一組有用的方法,允許您進一步處理返回的模型對象。需要注意的是,一些 QuerySet 方法會返回新的 QuerySet 對象,而其他方法僅對現有 QuerySet 進行求值,然后根據此求值返回一些信息。可以在 Django 文檔的 QuerySet API 參考頁面上找到完整的 QuerySet 方法列表。

                  在此討論的示例中,models.Manager 的 exclude 方法用於將檢索的 departments 對象僅限於那些具有相關 employees 對象的對象。然后,QuerySet 的 order_by 方法返回按 departments.manager.employee_id 字段排序的新 QuerySet 對象。它類似於以下 Oracle SQL 查詢:

SELECT * FROM departments WHERE manager_id IS NOT NULL ORDER BY manager_id; 

除了此處使用的 exclude 方法之外,您還可以通過 objects 屬性調用其他三種方法來查詢模型數據。清單如下:

  • all — 返回包含所有從模型基礎表中獲取的模型對象的 QuerySet。
  • filter — 返回僅包含那些與指定條件匹配的模型對象的 QuerySet。
  • exclude — 返回包含與指定條件不匹配的模型對象的 QuerySet。
  • get — 返回與指定條件匹配的單個模型對象。

由於 employees HR 表中的員工 ID 從 100 開始,因此在上一示例中,您可以用 filter 替代 exclude 以便使用數據填充 department_list,如下所示:

department_list = departments.objects.filter(manager__employee_id__gte = 100).order_by('manager__employee_id') 

與原始版本一樣,要考慮到在 departments 和 employees 模型之間定義的多對一關系(之討論過),在此情況下,SQL 對應物可能基於 departments 表查詢,如下所示:

SELECT * FROM departments WHERE manager_id >= 100 ORDER BY manager_id; 

此處討論的所有模型查詢方法(all 方法除外)都采用查找參數以縮小檢索模型對象的結果集。因此,在上述示例中,您結合使用以下查找參數和 filter 方法來查詢 departments 對象:

manager__employee_id__gte = 100 

您可能已經猜到,上述查找參數適合以下模式:field__subfield__lookuptype=value,其中 參數由雙下划線分隔的關鍵字組成。在此,manager 是引用 employees 對象的 departments 模型的字段。而 employee_id 是 employees 模型的字段。gte 是表示大於或等於的標准字段查找。可以在此示例中使用上述組合,因為 departments 和 employees 模型通過多對一關系關聯。然而,當查詢非相關數據時,您應使用以下模式:field__lookuptype=value。例如,為了獲得 employee_id 為 100 的 employees 對象,您可以按如下方式查詢 employees 模型:

emp = employees.objects.get(employee_id__exact = 100) 

實際上,您可能需要發出包含復雜 select 列表和/或復雜 WHERE 子句的查詢。例如,您要根據以下查詢獲得 employees 對象:

SELECT employees.*, (email||'@company.com') as email_address FROM employees; 

您如何告訴 Django 向依賴 employees 模型的查詢的 select 列表中添加另一個字段?這就是 QuerySet 方法 extra 能夠派上用場的地方。

employee_list = employees.objects.all().extra(select={'email_address': "(email||'@company.com')"}) 

結果,Django 將自動向此處檢索的每個 employees 對象添加 extra 屬性 email_address。

當然,您不僅可以使用 extra 方法增強 QuerySet 隱式生成的查詢的 select 列表。您還可以指定顯式 WHERE 子句並向查詢的 FROM 子句添加表,以及提供要綁定到 WHERE 子句中指定的相應占位符的動態參數。以下是您可以傳遞到 extra 方法的參數列表:

  • select — 將額外字段添加到 QuerySet 隱式生成的查詢的 select 列表
  • where — 在 QuerySet 查詢中指定顯式 WHERE 子句
  • tables — 在 QuerySet 查詢的 from 列表中包括其他表
  • order_by — 按照通過 select 或 tables 參數添加的字段對 QuerySet 進行排序
  • params — 傳入將安全綁定到 WHERE 子句中指定的占位符的動態參數

到目前為止,您已了解說明如何使用 Django 數據庫抽象 API 查詢基礎數據庫數據的示例。然而,除了查詢之外,您還可以使用 API 創建、更新以及刪除數據庫數據。

以下代碼段說明如何使用此處討論的 employees 和 departments 模型在 departments 數據庫表中創建新的記錄:

emp = employees.objects.get(employee_id__exact=100) new_dept = departments(department_id = 1000, department_name = 'test', manager = emp) new_dept.save() 

結果,應該在 departments 表中顯示新行。需要注意的是,model.save 方法還可用於更新現有行:

dept = departments.objects.get(department_id__exact=1000) dept.department_name = 'new name' dept.save() 

最后,要刪除行,請使用 model.delete:

dept = departments.objects.get(department_id__exact=1000) dept.delete() 

事務管理

默認情況下,Django 使用自動提交事務模式。這意味着,它可立即提交通過數據更改模型方法(例如上一部分中的 model.save 和 model.delete)進行的更改。但是,您可以使用 django.db.transaction 模塊提供的事務修飾程序,針對特定視圖函數更改此默認行為。您具有以下三個選項:

  • @transaction.autocommit(默認)
  • @transaction.commit_on_success
  • @transaction.commit_manually

例如,您可能指示 Django 在視圖函數內使用單個事務,並在最后僅當此函數成功返回時提交,如下所示:

from django.http import HttpResponse from myproj.myapp.models import employees, departments from django.http import Http404 from django.db import transaction @transaction.commit_on_success def newdept(request, emp_id, dept_id, dept_name): try: new_dept = departments(department_id = dept_id, department_name = dept_name, manager = None) new_dept.save() emp = employees.objects.get(employee_id__exact = emp_id) new_dept.manager = emp new_dept.save() except employees.DoesNotExist: raise Http404 return HttpResponse("The %s department record has been inserted." %dept_name) 

上述 newdept 視圖函數僅當成功返回時才自動提交在其內執行的所有操作。如果引發異常,則回滾所有未定更改。但是,如果您刪除 newdept 視圖函數前面的修飾詞或者用 @transaction.autocommit 替代此修飾詞,事務行為將發生更改。如果無法找到指定員工,仍將產生 HTTP 404 異常。但此時,第一個 new_dept.save 進行的更改將立即提交到數據庫,產生 manager_id 字段為空的部門記錄。

需要注意的是,上面列出的代碼可以通過 django.shortcuts 模塊中定義的 get_object_or_404 函數大大簡化。修改如下所示:

... from django.shortcuts import get_object_or_404 @transaction.commit_on_success def newdept(request, emp_id, dept_name, dept_id): new_dept = departments(department_id = dept_id, department_name = dept_name, manager = None) new_dept.save() emp = get_object_or_404(employees, employee_id__exact = emp_id) new_dept.manager = emp new_dept.save() return HttpResponse("The %s department record has been inserted." %dept_name ) 

然而,如果您已選擇 commit_manually 修飾程序,則不會選擇上述語法。在這種情況下,您需要分別使用 transaction.commit 或 transaction.rollback 顯式提交或回滾事務。因此,try-except 語法似乎更適用於這種情況:

... from django.db import transaction ... @transaction.commit_manually def newdept(request, emp_id, dept_id, dept_name): try: new_dept = departments(department_id = dept_id, department_name = dept_name, manager = None) new_dept.save() emp = employees.objects.get(employee_id__exact = emp_id) new_dept.manager = emp new_dept.save() except employees.DoesNotExist: transaction.rollback() raise Http404 else: transaction.commit() return HttpResponse("The %s department record has been inserted." %dept_name) 

將上述 newdept 視圖添加到 myproj/myapp/views.py 中。

創建表示層

如上所述,Django 模板旨在使用 django.template.Context 對象在視圖中顯示傳遞給它們的信息。回到在前面的“使用數據庫抽象 API”部分中討論的 index 視圖函數,讓我們創建在此視圖中使用的模板 index.html。

首先,在 myapp 目錄內創建一個名為 templates 的目錄。默認情況下,這是 Django 查找模板的目錄。然后,在 myapp/templates 目錄內創建 index.html,並將以下代碼插入文件中:

<h1>Managers of departments</h1> 
<table border = 1px cellpadding="3" style="font-family:Arial"> 
<tr> 
<th>empid</th> 
<th>first name</th> 
<th>first name</th> 
<th>email</th> 
<th>department name</th> 
</tr> 
{% for department in departments %} 
<tr> 
<td>{{department.manager.employee_id}}</td> 
<td>{{department.manager.first_name}}</td> 
<td>{{department.manager.last_name}}</td> 
<td>{{department.manager.email}}</td> 
<td>{{department.department_name}}</td> 
</tr> 
{% endfor %} 
</table>

模板中的代碼非常簡單。您使用標准 HTML 標記定義標題和表元素,嵌入 Django 的模板語言元素,這些語言元素的變量標記位於雙花括號 {{ ..}} 中,而塊標記位於 {% ..%} 對中。要了解有關 Django 模板語言的更多信息,您可以參閱 Django 文檔中的“The Django template language”頁面。

URL 調度

對於此處討論的 Django 應用程序,最后一個難題是 URLconf,它應該包含傳入請求與視圖函數匹配的 URL 模式。雖然您可以完全在項目級別定義這些模式,但將應用程序的 URL 從項目的配置中分離出來被認為是個較好的做法。因此,按如下方式編輯 myproj 目錄中的 urls.py 文件:

... urlpatterns = patterns('', ... url(r'^myapp/', include('myproj.myapp.urls')), ) 

然后,在 myapp 目錄中創建 urls.py 文件,並將以下代碼插入其中:

from django.conf.urls.defaults import * 
from myapp.views import index, newdept

urlpatterns = patterns('', 
url(r'^(?P<emp_id>\d+)/(?P<dept_name>\w+)/(?P<dept_id>\d+)/$' , newdept), 
url(r'^$', index), 
)

您可能已經猜到,第一種模式旨在處理向“事務管理”部分中討論的 newdept 視圖發出的請求,第二種模式用於向 index 視圖發出的請求。

使用 Django 開發 Web 服務器

現在該測試您剛構建的 Django 應用程序了。為此,您可以使用 Django 的內置開發 Web 服務器。首先,從操作系統提示符進入 myproj 目錄,並發出以下命令:

manage.py runserver 

結果,您應該看到一些告知您開發服務器正在運行的輸出行,以及此服務器所在的地址(默認情況下,應該為 http://127.0.0.1:8000/)。剩下的就是將您的瀏覽器指向 http://127.0.0.1:8000/myapp/。結果應該如下圖所示:

要測試 newdept 視圖,您可以在 Web 瀏覽器中輸入以下 url:http://localhost:8000/myapp/100/test/1000/。這應該將新記錄插入 departments 表中,此記錄的 department_id 為 1000,department_name 為 test,manager_id 為 100。

 

來源:http://www.oracle.com/technetwork/cn/articles/vasiliev-django-100817-zhs.html  

將 Django 用於 Apache

Django 的內置開發 Web 服務器僅適用於測試,這意味着它並不是生產服務器。如果要將它用於生產,您需要慎重考慮。

您可以通過 mod_python 模塊(用於在 Apache 內嵌入 Python)將 Django 部署到 Apache。因此,首先確保您已將 mod_python 模塊安裝到 Apache 服務器上。然后,您可以將以下 Location 塊添加到 Apache 的 httpd.conf 配置文件中(在 PythonPath 中使用實際路徑):

< Location "/myapp/"> SetHandler python-program PythonPath "['/home/user/myprojects', '/home/user/myprojects/myproj'] + sys.path" PythonHandler django.core.handlers.modpython SetEnv DJANGO_SETTINGS_MODULE myproj.settings PythonDebug On < /Location> 

重新啟動 Apache 之后,您就可以測試應用程序了。如果您的 Apache 服務器在 localhost 上運行,您可以將瀏覽器指向 http://localhost/myapp/ 以測試 index 視圖,指向 http://localhost/myapp/100/test/1000/ 以查看 newdept 是否正常工作。

結論

正如您在本文中了解的那樣,Django 是一個功能強大的 Web 框架,可讓您迅速創建數據庫驅動的 Web 應用程序。您還可以輕而易舉地將 Django 連接到 Oracle 數據庫。此外,Django 還具有絕佳的 ORM 特性。

 


免責聲明!

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



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