日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django笔记01-基础:一个完美主义的web框架

發(fā)布時(shí)間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django笔记01-基础:一个完美主义的web框架 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

淺談Web框架

一,什么是框架?

軟件框架就是為實(shí)現(xiàn)或完成某種軟件開發(fā)時(shí),提供了一些基礎(chǔ)的軟件產(chǎn)品,

框架的功能類似于基礎(chǔ)設(shè)施,提供并實(shí)現(xiàn)最為基礎(chǔ)的軟件架構(gòu)和體系

通常情況下我們依據(jù)框架來實(shí)現(xiàn)更為復(fù)雜的業(yè)務(wù)程序開發(fā)

一個(gè)字,框架就是程序的骨架

二,框架的優(yōu)缺點(diǎn)

可重用

成熟,穩(wěn)健

可擴(kuò)展性良好

選對框架很重要

三,python中常見的框架

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

力求精簡 web.py和Tornado

新生代微框架 Flask和Bottle

MVC設(shè)計(jì)模式

MVC實(shí)現(xiàn)了前后端和數(shù)據(jù)的分離,程序的解耦合,實(shí)現(xiàn)了程序的可擴(kuò)展性,可維護(hù)性

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

MVT

MModel模型數(shù)據(jù)層
VView視圖業(yè)務(wù)邏輯
TTemplate模板html

起步

1. 認(rèn)識(shí)Django

Django是一個(gè)高級(jí)的Python Web框架,它鼓勵(lì)快速開發(fā)和清潔,務(wù)實(shí)的設(shè)計(jì)。
由經(jīng)驗(yàn)豐富的開發(fā)人員構(gòu)建,它負(fù)責(zé)Web開發(fā)的許多麻煩,因此您可以專注于編寫應(yīng)用程序,而無需重新創(chuàng)建輪子。
它是免費(fèi)的和開源的。
被官方稱之為完美主義者的Web框架。
Django可以更快地構(gòu)建更好的Web應(yīng)用程序并減少代碼。

官方網(wǎng)址:https://www.djangoproject.com/

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

2. Django框架的特點(diǎn):

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

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的開發(fā)版本

LTS : 長期穩(wěn)定版

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

5. Django安裝

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

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

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

6. 使用Django框架搭建項(xiàng)目

# 在一個(gè)目錄中執(zhí)行一下命令,就會(huì)創(chuàng)建一個(gè)web項(xiàng)目目錄 django-admin startproject web# 進(jìn)入到web文件夾中,執(zhí)行以下命令,啟動(dòng)項(xiàng)目 python3 manage.py runserver# 接下來就可以在瀏覽器中訪問了

Django入門

創(chuàng)建一個(gè)應(yīng)用

python3 manage.py startapp home# 以上命令會(huì)在項(xiàng)目文件夾中創(chuàng)建一個(gè)目錄home

請求的流程

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

使用模板文件

URLconf路由

路由的定義

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

路由的特點(diǎn)

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

路由參數(shù)

路由參數(shù)就是在定義規(guī)則時(shí),使用小括號(hào)()括起來的內(nèi)容,將作為參數(shù)傳遞給視圖函數(shù)

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

命名組,命名參數(shù)

和路由參數(shù)一樣是用來獲取url中路徑作為參數(shù)來使用
不同的是,命名組會(huì)把當(dāng)前參數(shù)作為,關(guān)鍵字參數(shù)傳遞給視圖函數(shù),
因此對應(yīng)的視圖函數(shù),必須有關(guān)鍵字參數(shù)

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

指定用于視圖參數(shù)的默認(rèn)值

兩個(gè)路由指向同一個(gè)視圖函數(shù)

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

Model模型

數(shù)據(jù)庫配置

  • 安裝mysql
  • 創(chuàng)建庫,指定字符集
  • 安裝pymysql
  • 在settings.py的同級(jí)目錄中找到__init__.py文件,聲明pymysql
  • 在settings.py文件中配置 數(shù)據(jù)庫
  • 在settings.py文件中添加當(dāng)前的應(yīng)用
  • 定義模型

    在模型中定義屬性,會(huì)生成表中的字段
    django會(huì)為表增加自動(dòng)增長的主鍵列,每個(gè)模型只能有一個(gè)主鍵列
    如果使用選項(xiàng)設(shè)置某屬性為主鍵列后,則django不會(huì)再生成默認(rèn)的主鍵列
    屬性命名限制

    不能是python的保留關(guān)鍵字
    由于django的查詢方式,不允許使用連續(xù)的下劃線

    定義步驟

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

    View視圖

    Django中的視圖

    Django具有“視圖”的概念來封裝負(fù)責(zé)處理用戶請求和返回響應(yīng)的邏輯

    視圖函數(shù)或視圖簡而言之就是一個(gè)Python函數(shù),它接受一個(gè)Web請求并返回一個(gè)Web響應(yīng)

    此響應(yīng)可以是網(wǎng)頁的HTML內(nèi)容,重定向或404錯(cuò)誤,XML文檔或圖像。

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

    在視圖函數(shù)中使用模型

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

    url 統(tǒng)一資源定位符

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

    模型的操作

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

    增刪改查

    用戶管理

    先定義一個(gè)視圖函數(shù) 顯示添加表單
    表單吧數(shù)據(jù)提交到 執(zhí)行數(shù)據(jù)添加的函數(shù)中
    完成后跳轉(zhuǎn)到 用戶列表的視圖函數(shù)中
    刪除鏈接提交到 一個(gè)執(zhí)行用戶刪除的視圖函數(shù)中k,完成后跳轉(zhuǎn)列表頁面
    編輯鏈接提交到 一個(gè)顯示用戶數(shù)據(jù)的修改表單中
    修改表單吧數(shù)據(jù) 提交到執(zhí)行數(shù)據(jù)更新的視圖函數(shù)中

    這6個(gè)步驟對應(yīng)6個(gè)路由

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

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

    模型定義

    class User(models.Model):pass

    在這里已經(jīng)說了

    模型更改問題

    如果模型已經(jīng)創(chuàng)建好了一個(gè)表,你再模型中在增加一個(gè)字段,在生成遷移文件的時(shí)候就會(huì)報(bào)出
    新增的一個(gè)字段時(shí)注意,如果當(dāng)前新增的字段不允許為空,并且沒有設(shè)置默認(rèn)值,
    則會(huì)在生成遷移時(shí)

    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

    翻譯過來是:

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

    就算你表中沒有數(shù)據(jù),他也會(huì)這樣問,以為他傻,他不知道你有沒有數(shù)據(jù),他也不能知道,也不需要知道

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

    Template模板

    模板概念

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

    模板包含所需HTML 輸出的靜態(tài)部分,以及一些特殊的語法,描述如何將動(dòng)態(tài)內(nèi)容插入。

    模板語法

    1.變量

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

    • 當(dāng)模版引擎遇到一個(gè)變量,將計(jì)算這個(gè)變量,然后將結(jié)果輸出

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

    • 當(dāng)模版引擎遇到點(diǎn)("."),會(huì)按照下列順序查詢:

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

    • 在模板中調(diào)用方法時(shí)不能傳遞參數(shù)

    2.標(biāo)簽

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

    Django框架自帶的后臺(tái)

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

  • 需要登錄,因此要?jiǎng)?chuàng)建一個(gè)超級(jí)用戶
    在命令行執(zhí)行下一個(gè)命令進(jìn)行創(chuàng)建
    python3 manage.py createsuperuser

  • 重新啟動(dòng)服務(wù)后 ,使用創(chuàng)建的用戶進(jìn)行后臺(tái)的登錄

  • 配置settings.py文件,配置語言和時(shí)區(qū)

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

    總結(jié)

    以上是生活随笔為你收集整理的Django笔记01-基础:一个完美主义的web框架的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。