溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Django基礎(chǔ)知識(shí)學(xué)習(xí)及使用

發(fā)布時(shí)間:2021-06-29 14:55:23 來源:億速云 閱讀:120 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“Django基礎(chǔ)知識(shí)學(xué)習(xí)及使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Django基礎(chǔ)知識(shí)學(xué)習(xí)及使用”吧!

一、web框架分類和wsgiref模塊使用介紹

web框架的本質(zhì)

socket服務(wù)端 與 瀏覽器的通信

socket服務(wù)端功能劃分:

  1. 負(fù)責(zé)與瀏覽器收發(fā)消息(socket通信) --> wsgiref/uWsgi/gunicorn...

  2. 根據(jù)用戶訪問不同的路徑執(zhí)行不同的函數(shù) c. 從HTML讀取出內(nèi)容,并且完成字符串的替換 --> jinja2(模板語言)

Python中Web框架的分類:

  1. 按上面三個(gè)功能劃分:

    1. 框架自帶a,b,c --> Tornado

    2. 框架自帶b和c,使用第三方的a --> Django

    3. 框架自帶b,使用第三方的a和c --> Flask

  2. 按另一個(gè)維度來劃分:

    1. Django --> 大而全(你做一個(gè)網(wǎng)站能用到的它都有)

    2. 其他 --> Flask 輕量級(jí)

二、Django安裝及創(chuàng)建項(xiàng)目

安裝Django

pip3 install django==版本號(hào)(1.11.11/2.2.6)
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ django==版本號(hào)(1.11.11/2.2.6)

命令行創(chuàng)建項(xiàng)目

django-admin startproject project名稱

pycharm創(chuàng)建項(xiàng)目

File --> New project --> 左側(cè)選Django --> 右側(cè)填項(xiàng)目路徑

設(shè)置Django項(xiàng)目:

  1. manage.py:項(xiàng)目管理入口文件

  2. settings.py:

1. 配置HTML文件存放的位置
	Templates(存放HTML文件的配置) <-- 告訴Django去哪兒找我的HTML文件
2. 配置靜態(tài)文件存放的位置
	# 靜態(tài)文件保存目錄的別名
	STATIC_URL = '/static/' # 所有靜態(tài)文件(css/js/圖片)都放在我下面你配置的文件夾中
	STATICFILES_DIRS = [
		os.path.join(BASE_DIR, "static"),
	]
3. 配置中文及時(shí)區(qū)
	LANGUAGE_CODE = 'zh-hans'
	TIME_ZONE = 'Asia/Shanghai'
4. INSTALLED_APPS # 告訴Django有哪些APP
  1. urls.py: 保存了路徑和函數(shù)的對(duì)應(yīng)關(guān)系

Django項(xiàng)目的啟動(dòng)

  1. 命令行啟動(dòng)

在項(xiàng)目的根目錄下(也就是有manage.py的那個(gè)目錄),運(yùn)行:
python3 manage.py runserver IP:端口--> 在指定的IP和端口啟動(dòng)
python3 manage.py runserver 端口   --> 在指定的端口啟動(dòng)
python3 manage.py runserver        --> 默認(rèn)在本機(jī)的8000端口啟動(dòng)
  1. PyCharm啟動(dòng)

點(diǎn)綠色的小三角,直接可以啟動(dòng)Django項(xiàng)目(前提是小三角左邊是你的Django項(xiàng)目名)

Django WEB請(qǐng)求流程(簡(jiǎn)版)

  1. 啟動(dòng)Django項(xiàng)目,等待用戶連接

  2. 瀏覽器在地址欄輸入U(xiǎn)RL,來連接我的Django項(xiàng)目

  3. 在urls.py中 找 路徑和函數(shù)的 對(duì)應(yīng)關(guān)系

  4. 執(zhí)行對(duì)應(yīng)的函數(shù)

  5. 返回響應(yīng)

三、Django中的APP

什么是APP?以及為什么要用APP?

方便我們?cè)谝粋€(gè)大的Django項(xiàng)目中,管理實(shí)現(xiàn)不同的業(yè)務(wù)功能.

project  --> 項(xiàng)目  (大學(xué)校)
APP      --> 應(yīng)用  (Linux學(xué)院/Python學(xué)院/大數(shù)據(jù)學(xué)院/Java學(xué)院)

創(chuàng)建APP的命令

命令行,在Django項(xiàng)目的根目錄輸入: python3 manage.py startapp app名字

四、urls.py路由

  1. 不帶參數(shù)的請(qǐng)求

path('admin/', admin.site.urls)
  1. 帶參數(shù)的請(qǐng)求

path('solution/<int:變量名>/', views.ListSolution.as_view(), name="solutionList"),

五、views.py視圖

專門用來定義處理請(qǐng)求的函數(shù)

基本必備三件套 from django.shortcuts import HttpResponse, render, redirect

  1. HttpResponse("要返回的內(nèi)容") --> 通常用于直接返回?cái)?shù)據(jù)

  2. render(request, "html文件", {"k1": v1}) --> 返回一個(gè)HTML文件或者打開文件進(jìn)行字符串替換

  3. redirect("URL") --> 告訴用戶的瀏覽器去訪問其他的URL

request相關(guān)

  1. GET請(qǐng)求和POST請(qǐng)求

GET請(qǐng)求:
	1. 瀏覽器請(qǐng)求一個(gè)頁面
	2. 搜索引擎檢索關(guān)鍵字的時(shí)候
	3. a標(biāo)簽
POST請(qǐng)求:
	1. 瀏覽器向服務(wù)端提交數(shù)據(jù),比如登錄/注冊(cè)等
	2. 修改(新增)大段的數(shù)據(jù)
	3. 上傳文件
  1. GET請(qǐng)求URL傳值

127.0.0.1:8000/user/?變量名=變量值
  1. 獲取request請(qǐng)求的方法

request.method == "GET"/"POST"
  1. 獲取GET請(qǐng)求參數(shù)

request.GET.get(變量名, 默認(rèn)值)
  1. 獲取POST請(qǐng)求參數(shù)

request.POST.get(name的變量名, 默認(rèn)值) # 獲取單個(gè)值
request.POST.getlist(name的變量名) # 獲取多選列表值

六、ORM模型(Model)

ORM的對(duì)應(yīng)關(guān)系

類 ---> 數(shù)據(jù)表 對(duì)象 ---> 數(shù)據(jù)行 屬性 ---> 字段

ORM能做的事兒

  1. 操作數(shù)據(jù)表 --> 創(chuàng)建表/刪除表/修改表(操作models.py里面的類)

  2. 操作數(shù)據(jù)行 --> 數(shù)據(jù)的增刪改查

使用Django的ORM連接MySQL的詳細(xì)步驟:

  1. 自己動(dòng)手創(chuàng)建數(shù)據(jù)庫:create database 數(shù)據(jù)庫名;

  2. 在Django項(xiàng)目中設(shè)置連接數(shù)據(jù)庫的相關(guān)配置(settings.py 告訴Django連接哪一個(gè)數(shù)據(jù)庫)

# 數(shù)據(jù)庫相關(guān)的配置
DATABASES = {
	'default': { 'ENGINE': 'django.db.backends.mysql', # 連接的數(shù)據(jù)庫類型 
	'HOST': '127.0.0.1', # 連接數(shù)據(jù)庫的地址 
	'PORT': 3306, # 端口 
	'NAME': "day61", # 數(shù)據(jù)庫名稱 
	'USER': 'root', # 用戶 
	'PASSWORD': '123456' # 密碼 
	}
}
  1. 在app下面的models.py文件中定義一個(gè)類,這個(gè)類必須繼承models.Model

class 類名(models.Model): 
	...
  1. 執(zhí)行兩個(gè)命令

python3 manage.py makemigrations # 新建Model或Model有改動(dòng)時(shí)需要執(zhí)行
python3 manage.py migrate # 把更改翻譯成SQL語句,去數(shù)據(jù)庫執(zhí)行

在app/models.py里面定義類

一個(gè)簡(jiǎn)單的Model示例:

# 出版社
class Publisher(models.Model):
    id = models.AutoField(primary_key=True)  # 自增的ID主鍵
    # 創(chuàng)建一個(gè)varchar(64)的唯一的不為空的字段
    name = models.CharField(max_length=64, null=False, unique=True)

ORM單表的增加和查詢

  1. 查詢

models.UserInfo.objects.all() # 查詢所有
  1. 增加

models.UserInfo.objects.create(字段名=字段值)
  1. 刪除

solution = Solution.objects.get(id=id) # 先獲取對(duì)象
solution.delete() # 再刪除
# 或
Solution.objects.get(id=id).delete()
  1. 修改

solution = Solution.objects.get(id=id) # 先獲取對(duì)象
solution.字段名 = 字段值 # 修改某個(gè)字段的值
solution.save() # 保存修改

一對(duì)多、多對(duì)多模型

  1. 關(guān)系:

1. 一本書   只能   有一個(gè)出版社
2. 一本書   能有   多個(gè)作者
3. 一個(gè)作者 能寫   多本書

出版社和書: 一對(duì)多    --> 外鍵
書和作者:   多對(duì)多    --> 用第三張表做關(guān)聯(lián)

Django基礎(chǔ)知識(shí)學(xué)習(xí)及使用

  1. 一對(duì)多關(guān)系操作

# 出版社
class Publisher(models.Model):
	id = models.AutoField(primary_key=True)  # 自增的ID主鍵
	# 創(chuàng)建一個(gè)varchar(64)的唯一的不為空的字段
	name = models.CharField(max_length=64, null=False, unique=True)
	addr = models.CharField(max_length=128)
# 書
class Book(models.Model):
	id = models.AutoField(primary_key=True)  # 自增的ID主鍵
	# 創(chuàng)建一個(gè)varchar(64)的唯一的不為空的字段
	title = models.CharField(max_length=64, null=False, unique=True)
	# 和出版社關(guān)聯(lián)的外鍵字段
	publisher = models.ForeignKey(to="Publisher")

# 增加
new_book_obj = models.Book.objects.create(
    title="新書的名字",
    # publisher=publusher_obj,
    publisher_id=7
)

# 修改
book_obj = models.Book.objects.get(id=9)
book_obj.title=request.POST.get("book_title")
book_obj.publisher_id=9
book_obj.save()
  1. 多對(duì)多關(guān)系操作

# 作者表
class Author(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=16, null=False, unique=True)
    # 告訴ORM 我這張表和book表是多對(duì)多的關(guān)聯(lián)關(guān)系,ORM自動(dòng)幫我生成了第三張表
    book = models.ManyToManyField(to="Book")

    def __str__(self):
        return "<Author Object: {}>".format(self.name)

# 增加
# 取到提交的數(shù)據(jù)
new_author_name = request.POST.get("author_name")
# post提交的數(shù)據(jù)是多個(gè)值的時(shí)候一定會(huì)要用getlist,如多選的checkbox和多選的select
books = request.POST.getlist("books")
# 創(chuàng)建作者
new_author_obj = models.Author.objects.create(name=new_author_name)
# 把新作者和書籍建立對(duì)應(yīng)關(guān)系,自動(dòng)提交
new_author_obj.book.set(books)

Template模板

取值

{{ 變量名 }}

循環(huán)

{% for user in user_list %}
...
{% endfor %}

循環(huán)計(jì)數(shù)

{{ forloop.counter }}

最后一次循環(huán)

{{ forloop.last }}

判斷

{% if book_obj.publisher_id == publisher.id %}
{#  當(dāng)前書籍關(guān)聯(lián)的出版社才默認(rèn)選中#}
<option selected value="{{ publisher.id }}">{{ publisher.name }}</option>
{% else %}
{# 其他的出版社不選中 #}
<option value="{{ publisher.id }}">{{ publisher.name }}</option>
{% endif %}
{# 如果當(dāng)前這本書 在 當(dāng)前作者關(guān)聯(lián)的所有書 里面 #}
{% if book in author.book.all %}
<option selected value="{{ book.id }}">{{ book.title }}</option>
{% else %}
<option  value="{{ book.id }}">{{ book.title }}</option>
{% endif %}

到此,相信大家對(duì)“Django基礎(chǔ)知識(shí)學(xué)習(xí)及使用”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI