Django:學習筆記(2)——創建第一個應用

Django:學習筆記(2)——創建第一個應用

創建應用

  在 Django 中,每一個應用都是一個 Python 包,并且遵循著相同的約定。Django 自帶一個工具,可以幫你生成應用的基礎目錄結構,這樣你就能專心寫代碼,而不是創建目錄了。

  我們可以執行如下命令,來創建myweb應用。

python manager.py startapp myweb

  執行結束后,python為我們的項目創建好了一個遵循約定的目錄結構

  

注意:我們做一個區分,我們使用django-admin startproject創建后生成的目錄為項目目錄,應用目錄是創建在項目目錄內的,項目目錄內同時包含了一個和項目同名的目錄,我們叫項目源目錄,后文不在贅述。

創建第一個視圖

  我們在目錄中的views.py文件里,寫入第一個視圖,Hello World

from django.http import HttpResponsedef index(request):return HttpResponse("Hello World!")

  視圖有了,我們還需要一個URL來映射到它,我們需要在該目錄下創建一個urls.py文件

from django.conf.urls import url,includefrom . import viewsurlpatterns = [url('', views.index, name='index'),
]

  下一步是要在根 URLconf 文件中指定我們創建的?myweb.urls?模塊。在項目源目錄urls.py?文件的?urlpatterns?列表里插入一個?include(), 如下:

from django.conf.urls import url,include
from django.contrib import adminurlpatterns = [url('web/',include('myweb.urls')),url(r'^admin/', admin.site.urls)
]

  現在我們已經可以通過訪問/web路徑,得到hello,world結果,效果如下圖:

  

創建第一個模型

  在 Django 里寫一個數據庫驅動的 Web 應用的第一步是定義模型 - 也就是數據庫結構設計。

說明:

  模型是真實數據的簡單明確的描述。它包含了儲存的數據所必要的字段和行為。Django 遵循?DRY Principle?。它的目標是你只需要定義數據模型,然后其它的雜七雜八代碼你都不用關心,它們會自動從模型生成

  我們現在做一個用戶登錄的例子,首先我們需要定義用戶信息模型。

# 定義一個用戶信息
class User(models.Model):username = models.CharField(max_length=16)password = models.CharField(max_length=16)gender = models.CharField()mail = models.EmailField()

  代碼非常直白。模型被表示為?django.db.models.Model?類的子類。每個模型有一些類變量,它們都表示模型里的一個數據庫字段

  每個字段都是?Field?類的實例 - 比如,字符字段被表示為?CharField?,日期時間字段被表示為?DateTimeField?。這將告訴 Django 每個字段要處理的數據類型。每個?Field?類實例變量的名字也是字段名,所以最好使用對機器友好的格式。你將會在 Python 代碼里使用它們,而數據庫會將它們作為列名。

注意:我們可以使用?ForeignKey?定義了一個關系。這將告訴 Django,每個?Choice?對象都關聯到一個?Question?對象。Django 支持所有常用的數據庫關系:多對一、多對多和一對一,我們將在后面文章補充這部分內容

激活模型

  上面我們創建一個用戶模型,它給了 Django 很多信息,通過這些信息,Django 可以為這個應用創建數據庫表結構(生成?CREATE?TABLE?語句),同時創建可以與User對象進行交互的 Python 數據庫 API。但在這之前,我們需要做一些操作。

把應用安裝到項目

  但是首先得把myweb?應用安裝到我們的項目里。為了在我們的工程中包含這個應用,我們需要在項目源目錄的setting.py中的?INSTALLED_APPS?中添加設置。因為?MyWebConfig?類寫在文件?myweb/apps.py?中,所以它的點式路徑是?'myweb.apps.MyWebConfig'。如下圖所示:

將模型同步到數據庫

  我們的模型創建好了以后,我們需要執行一些方法,告知django將我們寫好的user模型同步到數據庫中,即創建相應的表結構。

  我們需要執行一次數據遷移,通過運行?makemigrations?命令,Django 會檢測你對模型文件的修改(在這種情況下,你已經取得了新的),并且把修改的部分儲存為一次?遷移,這一點很像Git,但是記住它只是記錄一下你的修改操作而已。

django會在我們應用的migrations下創建遷移文件。

接著,我們再運行migrate命令,在數據庫里創建新定義的模型的數據表。

python manage.py migrate

?說明:我們也可以通過遷移文件,來查看會執行哪些SQL命令。

 python manage.py sqlmigrate myweb 0001

  總之,我們在修改模型后,需要執行兩步操作來將新的模型同步到數據庫中。

  

實踐:實現用戶注冊

  首先,我們還是要回顧一下這篇文章的內容,我們知道了如何創建一個視圖以及設置URL映射、如何創建一個模型并且同步到數據庫中,現在我們來實踐一下實現用戶注冊。

  在視圖的處理中,我們可以做任何事情,并且返回任何我們需要反饋的信息。首先在想要獲取到用戶的請求信息,它們都被保存在request.GET和request.POST這兩個字典中。

[文件:myweb/views.py]
def addUser(request):# 創建用戶對象user = User()# 獲取請求數據user.username = request.GET['username'];user.password = request.GET['password'];# 保存user.save();return HttpResponse('<p>用戶添加成功</p>');

  接著,我們在應用的urls.py中添加URL映射關系

[文件:myweb/urls.py]
urlpatterns = [url("add",views.addUser)
]

  按照GET方式,我們在訪問時,需要在URL中拼接請求信息,如下

  

  至此,我們的第一個實踐內容結束,我們完成了一個獲取用戶請求信息,并調用模型內置方法將數據保存到數據庫

?

轉載于:https://www.cnblogs.com/MrSaver/p/10374584.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449932.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449932.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449932.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

dubbo源碼解析(十)遠程通信——Exchange層

遠程通訊——Exchange層 目標&#xff1a;介紹Exchange層的相關設計和邏輯、介紹dubbo-remoting-api中的exchange包內的源碼解析。前言 上一篇文章我講的是dubbo框架設計中Transport層&#xff0c;這篇文章我要講的是它的上一層Exchange層&#xff0c;也就是信息交換層。官方文…

嵌入式軟件開發工程師談軟件架構的設計

嵌入式軟件開發工程師談軟件架構的設計 注&#xff1a;此處嵌入式特指基于linux平臺&#xff0c;單片機和其他rtos不在討論范圍 筆者從事嵌入式軟件開發有6&#xff0c;7個年頭&#xff0c;bsp&#xff0c;驅動&#xff0c;應用軟件&#xff0c;android hall&#xff0c;fram…

為何獲得風險投資的公司多數倒閉了?

北京時間12月12日消息&#xff0c;據國外媒體報道&#xff0c;哈佛商學院的高級講師施克哈爾高希(Shikhar Ghosh)指出&#xff0c;風險投資領域的失敗案例比媒體報道的要多得多。 高希的研究表明&#xff0c;在風險資本支持的公司之中&#xff0c;有75%的公司從未向投資者返回過…

Linux rm命令、Linux touch命令、Linux tee命令

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Linux rm命令用于刪除一個文件或者目錄。 語法 rm [options] name...[options] name... 參數&#xff1a; -i 刪除前逐一詢問確認。…

highCharts使用中問題總結

想出一張圖表&#xff0c;數據是多條線體&#xff0c;45天的數據展示最近15天的。并且每次展示其中一條。可以切換時間看前面的 或者后面的。最開始遇到的問題是&#xff0c;展示一條線體成功&#xff0c;但是在切換線體的時候&#xff0c;成功但是接著刷新到最開始的狀態。跟同…

基于pjsip實現p2p語音對講

目的 為實現跨網絡的語音對講&#xff0c;使位于NAT后的兩個設備進行p2p的語音通訊&#xff0c;此處選用pjsip開源項目來實現。 未解決的問題&#xff1a;對稱型的NAT無法實現p2p打洞&#xff0c;pjsip采用turn服務進行轉發&#xff0c;不能稱之為純粹的p2p。 pjisp簡介 PJ…

VS2017 啟動調試報錯無法啟動程序 當前狀態中非法

昨天還可以使用&#xff0c;今天就莫名報了這個錯誤&#xff0c;百度了一下&#xff1a; 1. 第一種嘗試方法是右擊解決方案中的項目(圖標有帶球的)&#xff0c;打開屬性選擇“WEB”選項&#xff0c;修改特定頁為Home,結果還是報錯。 2.我又關閉Windows防火墻&#xff0c;依舊報…

ABAP WRITE

1、空行 WRITE /. 2、AS CHECKBOX DATA: check1 TYPE c LENGTH 1 VALUE X, check2 TYPE c LENGTH 1 VALUE . START-OF-SELECTION. WRITE: / check1 AS CHECKBOX, Checkbox 1, / check2 AS CHECKBOX, Checkbox 2. AT LINE-SELECTION. READ: LINE 1 FIELD VALUE check1, LINE 2 …

java 星期幾、得周一、得周日、上周、下周、相差、日期工具類

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 import org.apache.commons.lang3.StringUtils;import java.text.ParseException; import java.text.SimpleDateFormat; import java.ut…

蘋果前CEO斯卡利變身創業導師:欲尋下個喬布斯

喬布斯和約翰斯卡利 導語&#xff1a;國外媒體今天撰文稱&#xff0c;蘋果前CEO約翰斯卡利(John Sculley)雖然早已離開蘋果&#xff0c;但仍然活躍在科技行業。他現在將目光轉向了醫療科技領域&#xff0c;希望從中挖掘出下一個喬布斯。 以下為文章全文&#xff1a; 下一個喬布…

記錄一次kernel內存泄漏的查找定位過程

Bug描述&#xff1a;壓力測試一個小工程時發現內存逐漸減少&#xff0c;10個小時后出現OOM Bug定位過程&#xff1a; 對整個工程模塊進行分解&#xff0c;逐步縮小范圍&#xff0c;由于整個工程包括幾個相對獨立的小模塊&#xff0c;而整個工程采用單進程多線程的模型&#x…

python3.6+selenium_Testsuits測試套件

#!/usr/bin/env python # -*- coding: utf-8 -*- # Time : 2018/11/23 11:23 # File : unittest_test2_2.pyTestsuits測試套件 import unittest from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.commo…

PBRT筆記(7)——反射模型

基礎術語 表面反射可以分為4大類&#xff1a; diffuse 漫反射glossy specular 鏡面反射高光perfect specular 完美反射高光retro-reflective distributions 后反射分布幾何坐標系以及工具函數 pbrt中的反射是在反射坐標系中進行計算的。坐標系由著色點處法向量與兩個切向量組成…

Linux grep命令、Linux cd命令、Linux pwd命令

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Linux grep命令用于查找文件里符合條件的字符串。 grep指令用于查找內容包含指定的范本樣式的文件&#xff0c;如果發現某文件的內容符…

忠告:創業公司與大公司正面競爭易死

移動互聯網的興起給了創業公司足夠的發展空間&#xff0c;也提供了一個相對公平的競爭平臺。但機遇永遠與挑戰并存。   對于初創公司&#xff0c;最大的挑戰莫過于在移動互聯網大潮中生存下來。IDG資本合伙人高翔認為&#xff0c;初創公司不要和大公司正面競爭&#xff0c;應…

海康螢石攝像機遠程監控機制分析

背景介紹 有一個遠程監控的需求&#xff0c;正常情況下采用服務器轉發視頻流對服務器要求很高&#xff0c;所以p2p看似是一個比較好的方案&#xff0c;但是p2p打洞卻不是一件容易的事情&#xff0c;所以打算分析下海康螢石攝像機遠程監控的機制&#xff0c;是否采用了p2p的方式…

實體類中存在List集合,怎么在xml文件中,對應

public class AppointmentDTO {/**訂單id**/private String appointmentId;/**訂單里面的商品list**/private List<CommodityShowInAppoinment> list;/**訂單里面的商品數量**/private Integer count;/**訂單實際付款的金額**/private Float totalMoney; } 怎么弄呢&…

git管理復雜項目代碼

背景 我初學前端的時候接觸git&#xff0c;那時候只要會add/commit什么的就好了&#xff0c;網上的教程大多都停留在從頭到尾一個個介紹git的命令&#xff0c;關于各種用法&#xff0c;特別是多個分支來回交叉沖突的實際處理&#xff0c;很少有這方面的介紹&#xff0c;經過很多…

實現一個通用的生產者消費者隊列(c語言版本)

背景&#xff1a;筆者之前一直從事嵌入式音視頻相關的開發工作&#xff0c;對于音視頻的數據的處理&#xff0c;生產者消費者隊列必不可少&#xff0c;而如何實現一個高效穩定的生產者消費者隊列則十分重要&#xff0c;不過按照筆者從業的經驗&#xff0c;所看到的現象&#xf…

美媒:小米新浪達成合作 采取行動對抗騰訊

來自美媒的報道稱&#xff0c;兩家中國最具發展潛力的科技公司&#xff0c;新浪和小米將會共同合作&#xff0c;結合各自的通信應用程序來共同對抗移動通信的挑戰&#xff0c;尤其是擁有2億用戶的強勁對手微信。 來自中國的消息稱&#xff0c;這次新浪與小米的合作將會涉及到新…