Django筆記01-基礎:一個完美主義的web框架

淺談Web框架

一,什么是框架?

軟件框架就是為實現或完成某種軟件開發時,提供了一些基礎的軟件產品,

框架的功能類似于基礎設施,提供并實現最為基礎的軟件架構和體系

通常情況下我們依據框架來實現更為復雜的業務程序開發

一個字,框架就是程序的骨架

二,框架的優缺點

可重用

成熟,穩健

可擴展性良好

選對框架很重要

三,python中常見的框架

大包大攬 Django 被官方稱之為完美主義者的Web框架。

力求精簡 web.pyTornado

新生代微框架 FlaskBottle

MVC設計模式

MVC實現了前后端和數據的分離,程序的解耦合,實現了程序的可擴展性,可維護性

英文中文針對部分作用
Model模型是針對數據庫層面的程序調用模型,直接操作繼承model的模型對象
View視圖是針對用戶界面的數據顯示模板(hmtl)
Controller控制器針對業務邏輯的操作python程序

MVT

MModel模型數據層
VView視圖業務邏輯
TTemplate模板html

起步

1. 認識Django

Django是一個高級的Python Web框架,它鼓勵快速開發和清潔,務實的設計。
由經驗豐富的開發人員構建,它負責Web開發的許多麻煩,因此您可以專注于編寫應用程序,而無需重新創建輪子。
它是免費的和開源的。
被官方稱之為完美主義者的Web框架。
Django可以更快地構建更好的Web應用程序并減少代碼。

官方網址:https://www.djangoproject.com/

中文文檔:http://python.usyiyi.cn/

2. Django框架的特點:

快速開發:Django的宗旨在于幫助開發人員快速從概念到完成應用程序。
安全可靠:Django認真對待安全性,幫助開發人員避免許多常見的安全錯誤。
超可伸縮性: Web上的一些最繁忙的網站利用了Django快速靈活擴展的能力。

3. Django可以使用什么Python版本?

Django版本Python版本
1.82.7,3.2(直到2016年底),3.3, 3.4, 3.5
1.9, 1.102.7, 3.4, 3.5
1.112.7 , 3.4 , 3.5 , 3.6
2.03.5+

4. Django的開發版本

LTS : 長期穩定版

  • 2015 April 1.8
  • 2017 April 1.11
  • 2019 April 2.2

5. Django安裝

作為Python Web框架,Django需要Python,在安裝Python同時需要安裝pip。

# 在線安裝Django
pip3 install Django
# 檢測當前是否安裝Django及版本
python3 -m django --version
1.11.7

這里可以使用 -i 參數來指定鏡像源位置

6. 使用Django框架搭建項目

# 在一個目錄中執行一下命令,就會創建一個web項目目錄
django-admin startproject web# 進入到web文件夾中,執行以下命令,啟動項目
python3 manage.py runserver# 接下來就可以在瀏覽器中訪問了

Django入門

創建一個應用

python3 manage.py startapp home# 以上命令會在項目文件夾中創建一個目錄home

請求的流程

用戶輸入url地址發起請求,服務器接受到請求后,交給跟路由(項目同名目錄下的urls.py)

使用模板文件

URLconf路由

路由的定義

URL ==> 統一資源定位符
指得就是請求的(URL)地址
http://python.itxdl.cn/html/tutorial/
http://python.itxdl.cn/html/teachers/
可以在項目中指定請求的url地址,來交給對應的試圖函數進行解析

路由的特點

路由就是在urls中進行規則的配置
按照從上往下的順序來執行
如果匹配到,則假裝指定的視圖函數來執行
如果匹配不到,則拋出404 page not found

路由參數

路由參數就是在定義規則時,使用小括號()括起來的內容,將作為參數傳遞給視圖函數

# 路由規則
url(r'^article/(\d)$', views.article),
# 視圖函數
def article(request,para):return HttpResponse('接受到的參數是:'+para)

命名組,命名參數

和路由參數一樣是用來獲取url中路徑作為參數來使用
不同的是,命名組會把當前參數作為,關鍵字參數傳遞給視圖函數,
因此對應的視圖函數,必須有關鍵字參數

# 命名組 使用?P<變量名>方式來定義
url(r'abc/(?P<aa>[0-9]+/$',view.abc_2003)# 在對應的視圖函數中則必須有對應的關鍵字
def abc_2003(request,aa):print(aa)return HttpResponse('abc_2003')

指定用于視圖參數的默認值

兩個路由指向同一個視圖函數

# 路由
url(r'^user/index/(?P<page>[0-9]+)/$', views.user_index),
url(r'^user/index/$', views.user_index),# 視圖函數
def user_index(request,page=1):print(page)return HttpResponse('用戶列表數據的顯示'+page)    

Model模型

數據庫配置

  1. 安裝mysql
  2. 創建庫,指定字符集
  3. 安裝pymysql
  4. 在settings.py的同級目錄中找到__init__.py文件,聲明pymysql
  5. 在settings.py文件中配置 數據庫
  6. 在settings.py文件中添加當前的應用

定義模型

在模型中定義屬性,會生成表中的字段
django會為表增加自動增長的主鍵列,每個模型只能有一個主鍵列
如果使用選項設置某屬性為主鍵列后,則django不會再生成默認的主鍵列
屬性命名限制

不能是python的保留關鍵字
由于django的查詢方式,不允許使用連續的下劃線

定義步驟

  1. 找到應用中的models.py文件
from django.db import models# Create your models here.
# 模型的作用,降低程序的耦合性,更換數據庫就改個配置文件就行了class Users(models.Model):username = models.CharField(max_length=32)password = models.CharField(max_length=32)email = models.CharField(max_length=50)
  1. 生成遷移文件
python3 manage.py makemigrations
  1. 執行遷移
python3 manage.py makemigrate

View視圖

Django中的視圖

Django具有“視圖”的概念來封裝負責處理用戶請求和返回響應的邏輯

視圖函數或視圖簡而言之就是一個Python函數,它接受一個Web請求并返回一個Web響應

此響應可以是網頁的HTML內容,重定向或404錯誤,XML文檔或圖像。

為了將代碼放在某處,慣例是將視圖views.py放在名為的文件中,放在項目或應用程序目錄中

在視圖函數中使用模型

  1. 先在視圖函數中導入models
from . import models
# 模型的操作演示
def mod_demo(request):# 使用模型進行操作數據庫 數據的查詢操作res = models.Users.objects.all()print(res)# < QuerySet[ < Users: Users object >] ># 一個查詢集for x in res:print(x.username)return HttpResponse('模型你給的操作演示')

url 統一資源定位符

http://127.0.0.1:8000/user/abc?a=1&b=2
協議:http https file svn
ip或域名 127.0.0.1 www.itxdl.cn
端口: 80 443 8000 5000 8080
路徑: /user/abc
參數: ?a=1&b=2

模型的操作

# 1查詢
# 獲取當前模型中所有的對象數據
# 結果為一個查詢集
obs = models.Stu.objects.all()
# 根據id獲取當前對象 結果 對象
ob = models.Stu.objects.get(id=1)
# 注意:get方法能且只能返回一個對象
# 查多個報錯,查不到也報錯# 2添加
# 第一中方法 
data = {'name':'admin','age',20}
ob = models.Stu(**data)
ob.save()
# 第二種方法
ob = models.Stu()
ob.name = 'zhangsan'
ob.age = 20
ob.save()# 推薦第一種                
# 3刪除
# 獲取對象.執行刪除
ob.delete())# 4更新
ob.name = 'aabb'
ob.save())  

增刪改查

用戶管理

先定義一個視圖函數 顯示添加表單
表單吧數據提交到 執行數據添加的函數中
完成后跳轉到 用戶列表的視圖函數中
刪除鏈接提交到 一個執行用戶刪除的視圖函數中k,完成后跳轉列表頁面
編輯鏈接提交到 一個顯示用戶數據的修改表單中
修改表單吧數據 提交到執行數據更新的視圖函數中

這6個步驟對應6個路由

# 用戶數據的管理
url(r'stu/index$',views.stu_index,name='stu_index'),
# 執行用戶的添加
url(r'stu/insert$',views.stu_insert,name='stu_insert'),
# 顯示添加的表單
url(r'stu/add$',views.stu_add,name='stu_add'),
# 執行用戶的刪除
url(r'stu/del$',views.stu_del,name='stu_del'),
# 用戶的編輯表單
url(r'stu/edit$',views.stu_edit,name='stu_edit'),
# 執行用戶數據的更新
url(r'stu/update$',views.stu_update,name='stu_update'),

生成遷移文件時,還沒有吧應用添加到配置文件中?
如果已經生成遷移文件,則直接執行遷移就可以,
另外注意,生成的遷移文件不要輕易刪除

模型定義

class User(models.Model):pass

在這里已經說了

模型更改問題

如果模型已經創建好了一個表,你再模型中在增加一個字段,在生成遷移文件的時候就會報出
新增的一個字段時注意,如果當前新增的字段不允許為空,并且沒有設置默認值,
則會在生成遷移時

You are trying to add a non-nullable field 'age' to users without a default; we c
an't do that (the database needs something to populate existing rows).
Please select a fix:1) Provide a one-off default now (will be set on all existing rows with a null v
alue for this column)2) Quit, and let me add a default in models.py

翻譯過來是:

就是說,你加了一個字段,還說不能為空,然后那我之前還有挺多數據呢,這可咋整啊
您還想添加一個非空字段,還沒有默認,是不是傻?選擇一個修復吧,趕緊的:1)提供一個一次性的值2)退出,修改當前新增字段1. 設置默認值2. 允許為空

就算你表中沒有數據,他也會這樣問,以為他傻,他不知道你有沒有數據,他也不能知道,也不需要知道

Django學習中遇到的問題(1)django migration No migrations to apply

Template模板

模板概念

作為Web 框架,Django 需要一種很便利的方法以動態地生成HTML。最常見的做法是使用模板。

模板包含所需HTML 輸出的靜態部分,以及一些特殊的語法,描述如何將動態內容插入。

模板語法

1.變量

  • 變量輸出語法{{ var }}

  • 當模版引擎遇到一個變量,將計算這個變量,然后將結果輸出

  • 變量名必須由字母、數字、下劃線(不能以下劃線開頭)和點組成

  • 當模版引擎遇到點("."),會按照下列順序查詢:

    • 字典查詢,例如:foo[“bar”]
    • 屬性或方法查詢,例如:foo.bar
    • 數字索引查詢,例如:foo[bar]
  • 如果變量不存在, 模版系統將插入’’ (空字符串)

  • 在模板中調用方法時不能傳遞參數

2.標簽

  • 語法{ % tag % }
  • 作用
    • 在輸出中創建文本
    • 控制循環或邏輯
    • 加載外部信息到模板中
for標簽
{ %  for ... in ...  % }循環邏輯
{ %  endfor  % }
if標簽
{ %  if ...  % }邏輯1
{ %  elif ...  % }邏輯2
{ %  else  % }邏輯3
{ %  endif  % }
comment標簽
{ %  comment  % }多行注釋
{ %  endcomment  % }
include:加載模板并以標簽內的參數渲染
{ %  include "base/index.html"  % }
url:反向解析
{ %  url 'name' p1 p2  % }
csrf_token:這個標簽用于跨站請求偽造保護
{ %  csrf_token  % }

Django框架自帶的后臺

  1. 在瀏覽器訪問 admin
    http://127.0.0.1:8000/admin/

  2. 需要登錄,因此要創建一個超級用戶
    在命令行執行下一個命令進行創建
    python3 manage.py createsuperuser

  3. 重新啟動服務后 ,使用創建的用戶進行后臺的登錄

  4. 配置settings.py文件,配置語言和時區

LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False

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

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

相關文章

mysql存儲引擎的一點學習心得總結

首先我們應該了解mysql中的一個重要特性——插件式存儲引擎&#xff0c;從名字就能夠看出在mysql中&#xff0c;用戶能夠依據自己的需求隨意的選擇存儲引擎。實際上也是這樣。即使在同一個數據庫中。不同的表也能夠使用不同的存儲引擎。Mysql中支持的存儲引擎有非常多種&#x…

常見音視頻格式(轉載)

Contents 1 MPEG 系列 1.1 MPEG-1 1.2 MPEG-2 1.3 MPEG-4 1.4 MPEG-4 AVC 1.5 MPEG Audio Layer 1/2 1.6 MPEG Audio Layer 3 1.7 MPEG-2 AAC 1.8 MPEG-4 AAC 1.9 MPEG-4 aacPlus 1.10 MPEG-4 VQF 1.11 mp3PRO 1.12 MP3 Surround 2 DVD系列 2.1 Dolby Digital AC3 2.2 Dolby D…

編程語言難度排名_谷歌排名第一的編程語言,小學生拿來做答題,分分鐘鐘搞定高難度算法!...

點擊上方藍色文字關注我們吧谷歌排名第一的編程語言時什么&#xff1f;毫無疑問&#xff1a;肯定是 Python。 也難怪&#xff0c;作為大數據時代和人工智能時代的必備語言&#xff0c;Python 的優點太多了&#xff0c;語言簡潔、易學、開發效率高、可移植性強...... 另外&#…

poj 2484 A Funny Game

題目&#xff1a;http://poj.org/problem?id2484 一&#xff0c;題意&#xff1a; n個硬幣圍成一個圈&#xff0c;Alice與Bob輪流從圈中取硬幣。每次能夠取一枚或者連續的兩枚。 硬幣取走后留下的空位不用填補&#xff0c;空位相隔的兩個硬幣視為不相鄰。Alice第一個開始取。 …

58到家MySQL軍規升級版

一、基礎規范 表存儲引擎必須使用InnoDB 表字符集默認使用utf8&#xff0c;必要時候使用utf8mb4 解讀&#xff1a; &#xff08;1&#xff09;通用&#xff0c;無亂碼風險&#xff0c;漢字3字節&#xff0c;英文1字節 &#xff08;2&#xff09;utf8mb4是utf8的超集&#…

jsp 中包含 一個路徑為變量的文件

<head><base href"<%basePath%>"><% String fileroot"MyJsp.jsp"; %> </head><body><jsp:include page"<%fileroot %>" ></jsp:include></body>

FFMPEG中H.264的算法文檔--整理自ffmpeg論壇等

xchg_mb_border() 交換 MB 邊界的像素。閱讀代碼可知&#xff0c;交換雙方為邊界緩存 (left_border,top_borders) 與重建圖象中的相應數據。其中 xchg 參數是否為 1 決定&#xff0c;在從邊界緩存賦值到重建圖象的同時&#xff0c;是否保存重建圖象的數據到邊界緩存。 此函數僅…

python局部靜態變量_全局變量、局部變量和靜態變量

全局變量和局部變量在寫代碼時需要區分清楚&#xff0c;不然會出大問題。不同語言定義不同范圍的變量的寫法有很大的區別。那么靜態變量是在什么場景下用到呢&#xff1f;我們來假設這樣一個場景&#xff1a;在函數內部定義的變量&#xff0c;當程序執行到它的定義處時&#xf…

【轉載】fullpage.js學習

參考網址&#xff1a;http://www.dowebok.com/77.html 上面有詳細介紹及案例展示&#xff0c;很不錯哦&#xff0c;可以先去看看demo 一、簡介 fullPage.js 是一個基于jQuery的插件&#xff0c;它能夠很方便、很輕松的制作出全屏網站&#xff0c;主要功能有&#xff1a; 1.支持…

Deepin 下安裝 LAMP

ubuntu/deepin linux 下使用 apt-get 安裝所需套的軟件 LAMP 1. 安裝 apacache2 apt-get install apache2 配置文件&#xff1a;/etc/apache2/apache2.conf service apache2 start service apache2 stop service apache2 restart 2. 安裝 mysql sudo apt-get install my…

webpack打包測試_webpack入門筆記(一)

webpack 是一個現代 JavaScript 應用程序的靜態模塊打包器(module bundler)。當 webpack 處理應用程序時&#xff0c;它會遞歸地構建一個依賴關系圖(dependency graph)&#xff0c;其中包含應用程序需要的每個模塊&#xff0c;然后將所有這些模塊打包成一個或多個 bundle。webp…

[js高手之路] 跟GhostWu一起封裝一個字符串工具庫-擴展字符串位置方法(4)

本文&#xff0c;我們接著之前的框架繼續擴展&#xff0c;這次擴展了一共有5個與字符串位置相關的方法 between( left, right ) 返回兩個字符串之間的內容&#xff0c; 如果第二個參數沒有傳遞&#xff0c;返回的是找到的第一個參數 之后 到 字符串結尾的所有字符串 如果第二個…

ffmpeg和SDL學習筆記

根據ffmpeg官方網站上的例子程序開始學習ffmpeg和SDL編程。 SDL是一個跨平臺的多媒體開發包。適用于游戲&#xff0c;模擬器&#xff0c;播放器等應用軟件開發。支持linux 、win32 等操作系統。 主要應用&#xff1a; 視頻 設置8bpp或更高的任意色彩深度的視頻模式。如果某個…

百練-16年9月推免-B題-字符串判等

2743:字符串判等 查看提交統計提示提問總時間限制: 1000ms內存限制: 65536kB描述判斷兩個由大小寫字母和空格組成的字符串在忽略大小寫&#xff0c;且忽略空格后是否相等。 輸入兩行&#xff0c;每行包含一個字符串。輸出若兩個字符串相等&#xff0c;輸出YES&#xff0c;否則輸…

mysql中的內置函數

mysql內置函數列表可以從mysql官方文檔查詢&#xff0c;這里僅分類簡單介紹一些可能會用到的函數。 1 數學函數 abs(x) pi() mod(x,y) sqrt(x) ceil(x)或者ceiling(x) rand(),rand(N):返回0-1間的浮點數&#xff0c;使用不同的seed N可以獲得不同的隨機數 round(x, D)&#xff…

待整理

CNN 適合處理圖片類輸入數據&#xff0c;單獨的&#xff0c;數據之間沒有關系。 rnn則適合處理序列類數據&#xff0c;視頻幀&#xff0c;語言。 深度神經網絡一般指隱藏層大于2的神經網絡。深層網絡相對于淺層網絡&#xff0c;表達能力更強。僅有一個隱藏層的神經網絡就能擬合…

希爾伯特變換_學習筆記1-傅里葉變換1

最終目標是解微分方程。第一章首先介紹了一般意義下的傅里葉變換&#xff0c;之后逐漸將傅里葉變換的概念抽象化&#xff0c;將變換的定義域進行拓展。最后少量介紹傅里葉變換在偏微分方程中的應用。習題解答是自己寫的&#xff0c;有的不會&#xff0c;有的不知道對不對。傅里…

使用 sitemesh/decorator裝飾器裝飾jsp頁面(原理及詳細配置)

摘要&#xff1a;首先這個Decorator解釋一下這個單詞&#xff1a;“裝飾器”&#xff0c;我覺得其實可以這樣理解&#xff0c;他就像我們用到的Frame&#xff0c;他把每個頁面共有的東西提煉了出來&#xff0c;也可能我們也會用各種各樣的include標簽&#xff0c;將我們的常用頁…

FFPLAY的原理(一)

概要電影文件有很多基本的組成部分。首先&#xff0c;文件本身被稱為容器Container&#xff0c;容器的類型決定了信息被存放在文件中的位置。AVI和Quicktime就是容器的例子。接著&#xff0c;你有一組流&#xff0c;例如&#xff0c;你經常有的是一個音頻流和一個視頻流。&…

安卓開發 新浪微博share接口實現發帶本地圖片的微博

1.微博share接口 在開始之前&#xff0c;我們先看一下要用到的這個接口&#xff1a; 我們這次是要上傳本地圖片&#xff0c;可以很明確的知道&#xff0c;除了要用POST方式提交請求&#xff0c;還要采用multipart/form-data編碼方式。 那么這個multipart/form-data編碼方式是什…