您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Django基礎(chǔ)知識(shí)學(xué)習(xí)及使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Django基礎(chǔ)知識(shí)學(xué)習(xí)及使用”吧!
socket服務(wù)端 與 瀏覽器的通信
負(fù)責(zé)與瀏覽器收發(fā)消息(socket通信) --> wsgiref/uWsgi/gunicorn...
根據(jù)用戶訪問不同的路徑執(zhí)行不同的函數(shù) c. 從HTML讀取出內(nèi)容,并且完成字符串的替換 --> jinja2(模板語言)
按上面三個(gè)功能劃分:
框架自帶a,b,c --> Tornado
框架自帶b和c,使用第三方的a --> Django
框架自帶b,使用第三方的a和c --> Flask
按另一個(gè)維度來劃分:
Django --> 大而全(你做一個(gè)網(wǎng)站能用到的它都有)
其他 --> Flask 輕量級(jí)
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)
django-admin startproject project名稱
File --> New project --> 左側(cè)選Django --> 右側(cè)填項(xiàng)目路徑
manage.py:項(xiàng)目管理入口文件
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
urls.py: 保存了路徑和函數(shù)的對(duì)應(yīng)關(guān)系
命令行啟動(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)
PyCharm啟動(dòng)
點(diǎn)綠色的小三角,直接可以啟動(dòng)Django項(xiàng)目(前提是小三角左邊是你的Django項(xiàng)目名)
啟動(dòng)Django項(xiàng)目,等待用戶連接
瀏覽器在地址欄輸入U(xiǎn)RL,來連接我的Django項(xiàng)目
在urls.py中 找 路徑和函數(shù)的 對(duì)應(yīng)關(guān)系
執(zhí)行對(duì)應(yīng)的函數(shù)
返回響應(yīng)
方便我們?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é)院)
命令行,在Django項(xiàng)目的根目錄輸入: python3 manage.py startapp app名字
不帶參數(shù)的請(qǐng)求
path('admin/', admin.site.urls)
帶參數(shù)的請(qǐng)求
path('solution/<int:變量名>/', views.ListSolution.as_view(), name="solutionList"),
專門用來定義處理請(qǐng)求的函數(shù)
from django.shortcuts import HttpResponse, render, redirect
HttpResponse("要返回的內(nèi)容") --> 通常用于直接返回?cái)?shù)據(jù)
render(request, "html文件", {"k1": v1}) --> 返回一個(gè)HTML文件或者打開文件進(jìn)行字符串替換
redirect("URL") --> 告訴用戶的瀏覽器去訪問其他的URL
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. 上傳文件
GET請(qǐng)求URL傳值
127.0.0.1:8000/user/?變量名=變量值
獲取request請(qǐng)求的方法
request.method == "GET"/"POST"
獲取GET請(qǐng)求參數(shù)
request.GET.get(變量名, 默認(rèn)值)
獲取POST請(qǐng)求參數(shù)
request.POST.get(name的變量名, 默認(rèn)值) # 獲取單個(gè)值 request.POST.getlist(name的變量名) # 獲取多選列表值
類 ---> 數(shù)據(jù)表 對(duì)象 ---> 數(shù)據(jù)行 屬性 ---> 字段
操作數(shù)據(jù)表 --> 創(chuàng)建表/刪除表/修改表(操作models.py里面的類)
操作數(shù)據(jù)行 --> 數(shù)據(jù)的增刪改查
自己動(dòng)手創(chuàng)建數(shù)據(jù)庫:create database 數(shù)據(jù)庫名;
在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' # 密碼 } }
在app下面的models.py文件中定義一個(gè)類,這個(gè)類必須繼承models.Model
class 類名(models.Model): ...
執(zhí)行兩個(gè)命令
python3 manage.py makemigrations # 新建Model或Model有改動(dòng)時(shí)需要執(zhí)行 python3 manage.py migrate # 把更改翻譯成SQL語句,去數(shù)據(jù)庫執(zhí)行
# 出版社 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)
查詢
models.UserInfo.objects.all() # 查詢所有
增加
models.UserInfo.objects.create(字段名=字段值)
刪除
solution = Solution.objects.get(id=id) # 先獲取對(duì)象 solution.delete() # 再刪除 # 或 Solution.objects.get(id=id).delete()
修改
solution = Solution.objects.get(id=id) # 先獲取對(duì)象 solution.字段名 = 字段值 # 修改某個(gè)字段的值 solution.save() # 保存修改
關(guān)系:
1. 一本書 只能 有一個(gè)出版社 2. 一本書 能有 多個(gè)作者 3. 一個(gè)作者 能寫 多本書 出版社和書: 一對(duì)多 --> 外鍵 書和作者: 多對(duì)多 --> 用第三張表做關(guān)聯(lián)
一對(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()
多對(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)
{{ 變量名 }}
{% for user in user_list %} ... {% endfor %}
{{ forloop.counter }}
{{ 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í)!
免責(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)容。