后臺使用orm多還是直接sql_Django應用app創建及ORM

Django應用app創建及ORM

一.重要知識點回顧:

1. form表單提交數據的注意事項:

1. 是form不是from,必須要有method和action (action用來指定你的數據提交到后臺哪個地方,method用來指定你提交數據的方式)

2. 所有獲取用戶輸入的表單標簽要放在form表單里面,表單標簽必須要有name屬性 (name屬性在后臺會作為key來取出對應的輸入內容)

3. form表單必須要有submit按鈕 (將form表單包含的所有輸入信息提交至action所指向的地址)

2. GET和POST

什么時候用GET: (會將請求數據信息直接拼接至URL尾部)

向服務端請求一個網頁的時候

搜索引擎檢索時

什么時候用POST: (將數據加密放入特定的請求數據體內,相對安全且前不限制數據大小)

使用表單向服務器提交數據時

3. request.method --> 獲取的是你請求的方法(GET/POST...)必須是大寫!!!

4. request.POST --> 獲取POST提交過來的全部數據(字典)(獲取此類數據簡易實用get取值方式,數據不存在也不會報錯影響服務)

5. redirect --> 跳轉到指定頁面!!!(括號內指定路徑即可)

二.應用APP

1.什么是app?

app即一個個分支,項目好比是一個學校,應用app就好比一個個學院,所以一個項目下可以有多個app應用(后續會了解到一個app也可以有多個項目,這里暫不考慮)

2.如何在Django項目中創建app應用

在創建的Django項目界面點擊pycharm為我們配置的終端(terminal),輸入圖示內容即可創建名為app01的app應用,(這里在輸入的時候,不必全部一個一個自己敲,Tab鍵可自動幫我們補全,是不是很人性化~)

ce65f7effb2df79e9ab1ecda5f9b3715.png

3.給創建好的app應用添加配置(娶了人家就得給人家正名吧~)

0ffa0d71374eef3baa489052f7114685.png

三.ORM介紹

ORM概念

對象關系映射(Object Relational Mapping,簡稱ORM)模式是一種為了解決面向對象與關系數據庫存在的互不匹配的現象的技術。

簡單的說,ORM是通過使用描述對象和數據庫之間映射的元數據,將程序中的對象自動持久化到關系數據庫中。

ORM在業務邏輯層和數據庫層之間充當了橋梁的作用。

ORM由來

讓我們從O/R開始。字母O起源于"對象"(Object),而R則來自于"關系"(Relational)。

幾乎所有的軟件開發過程中都會涉及到對象和關系數據庫。在用戶層面和業務邏輯層面,我們是面向對象的。當對象的信息發生變化的時候,我們就需要把對象的信息保存在關系數據庫中。

按照之前的方式來進行開發就會出現程序員會在自己的業務邏輯代碼中夾雜很多SQL語句用來增加、讀取、修改、刪除相關數據,而這些代碼通常都是重復的。

ORM的優勢

ORM解決的主要問題是對象和關系的映射。它通常把一個類和一個表一一對應,類的每個實例對應表中的一條記錄,類的每個屬性對應表中的每個字段。

ORM提供了對數據庫的映射,不用直接編寫SQL代碼,只需像操作對象一樣從數據庫操作數據。

讓軟件開發人員專注于業務邏輯的處理,提高了開發效率。

ORM的劣勢

ORM的缺點是會在一定程度上犧牲程序的執行效率。

ORM用多了SQL語句就不會寫了,關系數據庫相關技能退化...

ORM總結

ORM只是一種工具,工具確實能解決一些重復,簡單的勞動。這是不可否認的。

但我們不能指望某個工具能一勞永逸地解決所有問題,一些特殊問題還是需要特殊處理的。

但是在整個軟件開發過程中需要特殊處理的情況應該都是很少的,否則所謂的工具也就失去了它存在的意義。

四.Django中的ORM

Django為我們提供的ORM可以匹配很多數據庫比如Mysql,oracle等,ORM強大就強大在操作的人不需要考慮使用的數據庫到底是什么類型ORM會自動幫我們翻譯成對應的數據庫引擎語言,我們要做的就是為其配置好相應的配置。

d678febd180924c4237b4e34cdea0ea9.png

1. 在Django項目的settings.py文件中,配置數據庫連接信息(這里回憶一下我們如何用pymysql操作數據庫的):

f28c856817d45bced7763ca42ffd8b37.png

2. 告訴Django怎么連接

Django默認使用的是 MySQLdb模塊 連接數據庫告訴Django用pymysql這個模塊去連接MySQL,在settings.py同目錄下的__init__.py文件中,指定使用pymysql模塊代替MySQLdb

515753d84aef233fa19287be480e8531.png

3. 在app/models.py文件中定義類(類及表,對象即行數據,屬性即字段)

07ec9235305f3e71f341b34a50193783.png

4. 執行創建表的操作

這里仍然需要在pycharm提供的終端中敲打下列兩條命令

1. python3 manage.py makemigrations --> 將models.py的修改登記到小本本上

2. python3 manage.py migrate --> 將修改翻譯成SQL語句,去數據庫執行

或者

453a6b3550b5a20ccfe7c5b28145caba.png

5.pycharm鏈接數據庫

8f21c7f68f98df9875274c2a456ad50a.png

如果右側沒有database按鈕,可通過下圖找到

fc676c6392672c569e0ea502de4643d8.png

由于這里我們用的是mysql數據庫,所以直接點擊mysql進行下面的界面

f6133859c0002d823f89de554bbd08f5.png

6.通過pycharm操作數據庫

a418a6955c70a6cd9013fcf8fb242dd7.png
681ba3aea28c02ae2f45b6c3743b03b6.png

五.利用上述配置實現簡單的注冊登錄功能

1.簡述Django框架數據交互大致順序

首先啟動我們Django項目(具體如何操作并啟動,請看上一篇博客),點擊pycharm下方出現的IP端口組成的地址,瀏覽器自動跳轉至我們Django界面,我們通過輸入路徑,瀏覽器幫我們自動將路徑發給服務端,我們在拿到路徑進行解析后,通過寫好的功能匹配對應關系,給客戶端返回相應的數據(最簡化理解Django前后端交互,即一次請求,對應一次相應,任何復雜的邏輯都僅僅是在這一來一回中通過一系列的代碼控制模板渲染頁面跳轉實現的,跳出來看簡單一批~~~)

2.構建數據流向(專業一點就叫路由)

b70c94f5d5732dea3ed12e0e6c5e80db.png
2ad8acc885a64aaafbfea72ee054ae68.png
ed7847976817b51ecd04893b6c02941d.png

3.html文件里我們簡單給個form表單即可

3e90e8757f2e1a235e6e54237e5f4477.png

4.來跑一下試試

643190e6ecf7cd99f0d0f191422475e9.png
57f0cd5b136b8568f2169aa9a4c6c1c0.png
f04749c803db9993abe40e325b547401.png

填入數據,如果匹配成功就做下一步操作,細心看完我的博客的應該知道我設置的正確的賬號和密碼,

當我們輸入正確的時候,我這里后臺直接告訴瀏覽器去重定向訪問百度首頁,

六.五中的例子有不足的地方在于沒有加入數據庫,在五的基礎上我們看看加入數據庫之后的操作。

462b8874423076175c3bf6973adb9d7e.png

下面的add函數就是做新增數據的界面,(前期在剛接觸Django框架時,牢牢記住前后端交互,你給我一個請求,我給你一個相應,不多BB不多交流),

把看似復雜的前后端交互透徹理解為面向過程式編程,我們每次只考慮單一請求應該如何去處理即應對即可,這樣一個一個的對應處理到最后就是一個龐大的

項目邏輯,外人看來復雜一批~其實內部原理其實很簡單~~~

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

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

相關文章

java ruby腳本_Java 程序中直接執行 Ruby 腳本 (JRuby)

1.[代碼]MainClass.javaimport java.io.BufferedReader;import java.io.FileReader;import javax.script.Invocable;import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;public class MainClass {public static void main(String[] args) throws Excep…

python win32gui安裝_python-無法安裝win32gui

我正在嘗試使用pip安裝win32gui,但出現錯誤: C:\Users\?????>pip install win32gui Collecting win32gui Using cached https://files.pythonhosted.org/packages/b8/75/7bed82934e51903f9d48b26b3996161bb2dce1731607b4bb7fd26003ed3e/win32gui-221.5.tar.…

時間戳 java_java中獲取時間戳的方法

在java開發過程中經常會遇到統計某一天或是某一個月的數據,因此常常需要獲取截取數據的兩個時間戳(比如統計今天的數據,則需要獲取一個開始時間為今天零點以及一個結束時間為明天零點),然后根據數據相關的時間是否在該時間區間內來判斷是否將…

求一批整數中出現最多的個位數字_C語言經典100例007-求低n-1位的數

系列文章《C語言經典100例》持續創作中,歡迎大家的關注和支持。喜歡的同學記得點贊、轉發、收藏哦~后續C語言經典100例將會以pdf和代碼的形式發放到公眾號歡迎關注:計算廣告生態 即時查收1 題目函數:unsigned fun(unsigned w)功能…

python合并多個pdf_python合并多個pdf文件

假設您有個無聊的工作,將幾十個PDF文檔合并成一個PDF文件。 他們每個都有封面頁作為第一頁,但你不希望在最終結果中重復覆蓋表。 即使有有很多免費的程序來組合PDF,其中許多只是合并整個文件在一起。 讓我們編寫一個Python程序來自定義哪些頁…

python class類_python類class基礎

44、class類:一、類定義的一般形式:1、簡單的形式:實例化對象沒有自己獨有的數據屬性。>>> class fistclass():... data1 hello world ### >這是類的數據屬性或類成員屬性。... def printdata(self): ###>這是類的方法&#…

java文件序列化_Java序列化與反序列化,文件操作

參考兩篇博客:http://blog.csdn.net/moreevan/article/details/6697777http://blog.csdn.net/moreevan/article/details/6698529針對第二篇博客,看了下面的評論,發現子類輸出的書號其實是父類的,書名是自己先添加的成員變量&#…

python 徹底解讀多線程與多進程_python 多進程與多線程淺析

python多線程是偽多線程,同時間最多只有一個線程在執行,但這樣并不代碼python的多線程沒有作用,對于IO密集型的系統,python的多線程還是能極大的提升性能~關于python偽多線程可以去了解python GIL的概念。以下代碼涉及…

python什么軟件開發好_python怎樣才能學好?python軟件開發什么

眾所周知,Python是近年來熱門的編程語言之一,吸引了很多人參與到it行業的Python開發中來,但是如何學習Python編程呢?對于每一個初學Python的朋友來說,估計有點困惑。那么我們如何才能學好Python呢?學習Python需要什么技能?有些…

java 設計模式原則_Java設計模式的七大原則

設計原則名稱定 義使用頻率單一職責原則(Single Responsibility Principle, SRP)一個類只負責一個功能領域中的相應職責。★★★★☆開閉原則(Open-Closed Principle, OCP)軟件實體應對擴展開放,而對修改關閉。開閉原則的關鍵在于抽象化。★★★★★里氏代換原則(L…

python自定義模塊和三方模塊_python基礎知識8——模塊1——自定義模塊和第三方開源模塊...

模塊的認識模塊,用一砣代碼實現了某個功能的代碼集合。類似于函數式編程和面向過程編程,函數式編程則完成一個功能,其他代碼用來調用即可,提供了代碼的重用性和代碼間的耦合。而對于一個復雜的功能來,可能需要多個函數…

dhcp只能分配與路由器相同網段么_路由器的橋接詳解

網上關于路由器無線橋接的教程很多,讓你注意那注意這的,都沒有說明白。今天,我來試著縷清它們間的關系!1、主路由器這是我主路由器目前的狀態,其中IP地址是我在上級光貓路由的可用ip段192.168.1.2~254里選的一個&#…

逆序對java_逆序對

求逆序對問題用歸并排序的時間復雜度比暴力算法更低。假設有一個數組{8,1,2,5,7,4,3,6}首先歸并排序第一次對數組進行分割 8 1 2 5 7 4 3 6二次分割 8 1 25 74 3…

python123測驗9程序題答案_Django ORM 練習題及答案_python_腳本之家

1.modles中表結構#出版社class Publisher(models.Model):name models.CharField(max_length32)city models.CharField(max_length32)def __str__(self):return "".format(self.id, self.name)#書籍class Book(models.Model):title models.CharField(max_length32)…

java父類shape_為什么該父類無法調用其子類.__ShapeCircle_public_perimeter_getType_shapej__169IT.COM...

子類:public class ShapeCircle extends Shape{protected double r;public ShapeCircle(){setside(0.0);}public ShapeCircle(double r){setside(r);}public void setside(double r){this.rr;}public double perimeter(){return Math.PI*2*r;}public String getType(){return &…

python中雙冒號的作用_python中雙冒號

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技術人對外發布原創技術內容的最大平臺&…

java電子通訊錄畢業設計_(C)JAVA001電子通訊錄(帶系統托盤)

打開Server Socket,創建一個服務器型套接字和一個普通套接字,服務器型套接字在指定端口為客戶端請求的Socket 服務;? 使用ServerSocket類的accept()方法使服務器型套接字處于監聽狀態并把監聽結果返回給普通套接字;? 為該普通套接字創建輸入…

python進行數據分析需要安裝哪兩個庫_對Python進行數據分析_關于Package的安裝問題...

一、為什么要使用Python進行數據分析?python擁有一個巨大的活躍的科學計算社區,擁有不斷改良的庫,能夠輕松的集成C,C,Fortran代碼(Cython項目),可以同時用于研究和原型的構建以及生產系統的構建。二、Python的優勢與劣勢&#xff…

java orcl自動_Oracle自動生成編號

祝大家新年快樂,有任何問題可與我聯系:今天用JAVA向Oracle數據庫中插數據時,每次都要去計算ID,覺得好麻煩,于是想到了用數據庫自帶的ID來做,具體如下:1、首先得創建一序列序列(SEQUENCE)序列是一…

bat批處理執行python_.bat批處理添加Python任務

一、常用命令含義例一、多進程python 任務 -- start 命令echo offstart python C:\Users\ntitled\n\update_restt\test_bat.pypython C:\Users\ntitled\iin\update_restt\test_bat.pypython C:\Users\ntitled\jin\update_restt\test_bat2.pyexit1、它的作用是讓執行窗口中不顯…