Django入門學習教程

2021-02-20 碼農雲庫

本文 pdf 下載連結

基礎部分

須知:1.HttpResponse 返回字符串2.Render 返回一個Html文件3.Redirect 重定向

創建Django項目

創建apps

在這裡插入圖片描述一、簡單配路由

二、接收url的參數

三、url正則表達式傳參在這裡插入圖片描述

四、表單提交(GET、POST、頁面跳轉)

上面介紹的都屬於 FBV 就是function 通過函數處理

下面介紹 CBV 就是 class 通過類

五、登錄案例:#

綜合案例部分

這個案例是一個管理系統:有學生表、班級表、教師表,班級與教師的關係表,對上面四張表進行操作,完成前端網頁和後端處理,通過本案例熟悉Django項目的編程。

內容的html部分,界面不是很好看,不過這不是重點,主要了解操作過程就好了。

一、班級表的操作第一節:讀取class表的數據,在界面顯示

文件目錄:

url路由:

from apps import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path("classes/",views.classes),
]

Class.html代碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>班級列表</title>
</head>
<body>
<h1>班級列表</h1>
<div><a href="/class_add/">添加</a></div>
<table border="1">
    <thead>
    <th>ID</th>
    <th>班級名稱</th>
    <th>操作</th>
    </thead>
    <tbody>
    {% for row in result %}
        <tr>
            <td>{{ row.id }}</td>
            <td>{{ row.title }}</td>
            <td>
                <a>編輯</a>|
                <a>刪除</a>
            </td>
        </tr>
    {% endfor %}
    </tbody>
</table>

</body>
</html>

Views.py

from django.shortcuts import render,HttpResponse,redirect
from django.views.generic import View
import pymysql

def classes(request):
    conn=pymysql.connect(
        host="127.0.0.1",
        port=3306,
        user="root",
        password="123456",
        database="classes",
        charset="utf8"
    )
    cursor = conn.cursor() # 出現前端網頁拿不到數據,因為元組傳不過去
    # cursor = conn.cursor(pymysql.cursors.DictCursor)

    sql="select * from class"
    cursor.execute(sql,())
    result=cursor.fetchall()
    print(result)
    return render(request,"classes.html",{"result":result})

在這裡插入圖片描述

1.使用cursor = conn.cursor(pymysql.cursors.DictCursor)代碼result裡面的數據:字典頁面顯示:

2.cursor = conn.cursor() # 出現前端網頁拿不到數據,因為元組傳不過去Result裡面的結果:元組頁面顯示:

在這裡插入圖片描述第二節:添加班級1.創建資料庫幫助類:

因為資料庫操作要用的地方比較多,所以創建一個工具包utils,在裡面創建一個sqlhelper.py的資料庫工具文件。

在這裡插入圖片描述

Sqlhelper.py

import pymysql

class SqlHelper():
    def __init__(self):
        self.connet()
    def connet(self):
        self.conn=pymysql.connect(
        host="127.0.0.1",
        port=3306,
        user="root",
        password="123456",
        database="classes",
        charset="utf8")
        self.cursor = self.conn.cursor(pymysql.cursors.DictCursor)

    def get_list(self,sql,args):
        self.cursor.execute(sql, args)
        result = self.cursor.fetchall()
        return result

    def close(self):
        self.cursor()
        self.conn.close()

使用工具類:

from apps.utils.sqlhelper import SqlHelper # 導入資料庫幫助類
def classes(request):
    obj=SqlHelper()
    sql = "select * from class"
    result = obj.get_list(sql,())
obj.close()
    return render(request,"classes.html",{"result":result})

使用上面代碼的效果和原來是一樣的。

2.添加班級:

Calss_add.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>添加班級</title>
</head>
<body>
<h1>添加班級</h1>
<form method="post" action="/class_add/">
    <p><input type="text" name="title"  placeholder="班級名稱"></p>
    <p><input type="submit" value="添加"></p>
</form>
</body>
</html>

Views.py

def class_add(request):
    if request.method=="GET":
        return render(request,"class_add.html")
    else:
        title = request.POST.get("title")
        print(title)
        obj=SqlHelper()
        sql="insert into class(title) values(%s)"
        obj.modify(sql,title)
        obj.close()
        return redirect("/classes/")

Sqlhelper.py

def modify(self,sql,args):
    self.cursor.execute(sql,args)
    self.conn.commit()

3.刪除班級:

Classes.html

<a href="/class_del?cid={{ row.id }}">刪除</a>

Views.py

def class_del(request):
    cid = request.GET.get("cid")
    sql="delete from class where id=%s"
    obj = SqlHelper()
    obj.modify(sql,cid)
    obj.close()
    return redirect("/classes/")

4.編輯班級:

Classes.html

<a href =/class_edit?cid={{ row.id }}> 編輯</a>|

Class_edit.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>編輯班級</title>
</head>
<body>
<form method="post" action="/class_edit/">
    <p><input type="text" value="{{ id }}" name="cid" ></p>
    <p><input type="text" name="title" value="{{ title }}"></p>
    <p><input type="submit" value="更新"></p>
</form>
</body>
</html>

Views.py

def class_edit(request):
    if request.method=="GET":
        cid = request.GET.get("cid")
        obj = SqlHelper()
        sql="select * from class where id=%s"
        result = obj.get_one(sql,cid)
        obj.close()
        return render(request,"class_edit.html",result)

    else:
        cid = request.POST.get("cid")
        title=request.POST.get("title")
        print(cid,title)
        obj=SqlHelper()
        sql="update class set title=%s where id=%s"
        obj.modify(sql,(title,cid))
        return redirect("/classes/")

sqlHelper.py

def get_one(self,sql,args):
    self.cursor.execute(sql, args)
    result = self.cursor.fetchone()
    return result

演示:

在這裡插入圖片描述第二節:分包管理1.創建app

1.創建一個apps的包(原來的不要了,代碼還是需要,本來那個apps按理要設置為classes的)

2.配置路由

4.將前面寫的路由地址同一加上/classes/

<a href =/classes/class_edit?cid={{ row.id }}> 編輯</a>|
<a href="/classes/class_del?cid={{ row.id }}">刪除</a>
<form method="post" action="/classes/class_add/">
等等。。。。

通過上面的路由配置管理,其實是分了兩層,最外層是:和項目同名下面的urls文件裡的路由;裡層是:相應app下的,自己手動添加的urls路由文件。當前端訪問時,首先進入最外層的路由,然後根據配置分配到不同的app文件下的urls路由文件中,從而找到處理函數。

第三節:反向解析

在urls.py 文件中,在進行url映射時,為請求的url命名,以便在模板頁面或者views.py視圖中可以進行反向解析,同時在修改了url映射的請求路徑,名稱不變的情況下,不再修改模板頁面或者視圖中的數據,項目不受影響正常執行! url標籤中使用模板變量和普通標籤參數一樣,空格隔開,{{% url 別名 %}}即可。

使用反向解析:

前端:
<div><a href="{% url 'classes:class_add' %}">添加</a></div>
<a href ="{% url 'classes:class_edit' %}?cid={{ row.id }}"> 編輯</a>|
<a href="{% url 'classes:class_del' %}?cid={{ row.id }}">刪除</a>
後端:
return redirect("classes:classes")

補充:使用static下面的內容配置

當我們在項目下面創建一個static文件夾,裡面放置一些靜態文件,需要在setting.py裡面配置如下:

在這裡插入圖片描述
<body>
     <img src="/static/1.png">
</body>

其他表的操作都差不多,到這裡Django基本有所了解了。

每天進步一點點!!!

相關焦點

  • 一個完整的Django入門指南
    前言今天我將開始一個關於 Django 基礎知識的全新系列教程,這是一個開始學習 Django 的完整入門指南,教程材料一共會被分為七個部分。我們將從安裝、開發環境的準備,模型,視圖,模板,URL到更高級的主題(如遷移,測試和部署)中詳細探討所有基本概念。
  • 入門Python, 看這些資料就夠了
    身邊有不少朋友想學習Python,經常問我怎麼學,有沒有推薦的資料。因此特意針對初學者整理了一份, 希望對即將學習或正在學習Python的你們有幫助。 要入門Python,資料並非越多越好, 基本上看這些資料就夠了。 。
  • Python+django網頁設計入門(12):使用Bootstrap和jQuery
    前導課程:Python+django網頁設計入門(11):在線考試與自動評分Python+django網頁設計入門(10):分頁顯示Python+django網頁設計入門(9):自定義反爬蟲功能Python+django網頁設計入門(8):網站項目文件夾布局Python+django網頁設計入門
  • Django官方文檔終於出中文版了
    之所以讓我覺得驚喜與意外,是因為:Django 的文檔寫得算是技術文檔裡可讀性相當高的,提供了入門教程和專題指南。之前對於 Django 的學習我一直推薦看官方文檔,但不得不加上一句「如果你英語水平允許的話……」。現在總算是等來好日子了。各位想向網站/伺服器開發方向進階的同學不要錯過,這份官方文檔的價值絕對超過市面上任何一本 Django 教材。
  • 資源|Django全棧工程師學習
    關於Django使用教程的介紹:其實在一些應用程式開發論壇上,你可通過付費的方式,買到一些關於Django的電子版使用教程,而其中有些則可以免費使用。這些教程可作為 Django的入門教材,對你會有一定的幫助。自從10年前Django問世以來,它就一直處在更新換代的過程中。研發人員對其進行了大量的更新,進一步提高了Django的實用性。
  • Django第二十八課
    本部分內容參考B站UP再敲一行代碼的Django2教程[1]⚠️:多圖預警第二十八課 自定義用戶模型在上節課登錄功能中,我們提到了個人資料。這節課我們繼續講述關於個人資料中的用戶自定義內容。from django.contrib import adminfrom django.contrib.auth import get_user_modelfrom django.contrib.auth.admin import UserAdmin as BaseUserAdminfrom django.utils.translation
  • Python Django初學者教程 - 智能甄選
    學習如何使用最流行的PythonWeb應用程式開發框架。Python Django教程 - 什麼是Django?Django是一個高級Python框架。它是一個免費的開源框架,用Python編寫,遵循模型 - 視圖 - 模板架構模式。
  • Django實戰教程: 開發企業級應用智能文檔管理系統smartdoc(1)
    我們用戶註冊登錄功能交給了django-allauth, 所以把allauth也進去了。如果你不了解django-allauth,請閱讀django-allauth教程(1): 安裝,用戶註冊,登錄,郵箱驗證和密碼重置(更新)。
  • Django第十八課
    本部分內容參考B站UP再敲一行代碼的Django2教程[1]第十八課-熱門博客閱讀及緩存提速在上節課中,我們討論了閱讀計數統計和顯示的問題,我們可以對這個進一步挖掘,統計當日熱門閱讀博客、昨日熱門閱讀博客以及最近七天熱門閱讀博客。
  • Django第十七課
    本部分內容參考B站UP再敲一行代碼的Django2教程[1]第十六課 博客閱讀計數統計和顯示在上一節課中我們學習了如何對博客閱讀量進行統計,還有一個問題沒有解決:沒有具體到某一天的統計數據(雖然訪問量很低,但是可以通過這個需求了解如何進行統計)。
  • 最淺顯易懂的Django系列教程(1)-URL與視圖
    最近陸陸續續收到一些反饋,有些想學習的小夥伴說Django資料比較難找或不夠全面,而這次我們將Django系列整合了一下,免費提供給大家學習。
  • Django REST Framework教程(6): 認證詳解及如何使用Token認證
    from django.contrib.auth.models import Userfrom rest_framework import authenticationfrom rest_framework import exceptionsclass ExampleAuthentication(authentication.BaseAuthentication
  • 零基礎學Python,應該知道的學習路徑和經驗
    第一步肯定是先了解下什麼是python,它能做什麼;這個建議找個python入門的書籍看看:《從零開始學 Python》(第二版)Python 之旅推薦的這兩本入門書籍任選一本看就可以了,入門書籍的內容也不需要全部都看,只要了解python一些基礎知識:數據類型:整型、字符串、列表、字典、元組基礎語句
  • Python基礎教程——秒懂django操作資料庫
    現在,先上結論:如果我們只是很簡單的操作一下資料庫,我們推薦使用mysqlclient這個第三方庫如果對資料庫的操作要做一些處理,資料庫又會變動,或者業務需求比較複雜,那就推薦使用django簡易操作代碼實在太簡單,如下所示:
  • Django實現分頁功能
    在本節中,我們將介紹 Django 為我們提供的高級模塊,通過高級模塊的學習,你會感受到 Django 的易用性如此之強,但是同時它又很複雜,所以在學習
  • Django 2.0 項目實戰: 擴展Django自帶User模型,實現用戶註冊與登錄
    網上很多Django關於實現用戶註冊與登錄的教程都是用Django 1.X寫的,比較老了,所以小編我覺得有必要親自動手用Django 2.0重寫用戶註冊與登陸教程。另外網上很多教程忽略了Django Auth模塊自帶的User模型而重新建立了自己用戶的模型,小編我一看到這種教程就會投去一臉鄙視的目光。一個網站會什麼要有兩個User模型? Why? Why?
  • 10道題教你使用python Django框架來實現web應用,值得收藏
    關於django升級:django1.5開始支持python3。同時django1.11是支持python2的最後的版本。如果使用的django版本大於等於1.5,則django版本可以不升級。如果django版本低於1.5,則需要升級django版本。升級django版本後,新版本不兼容的老的API都需要修改。這個工作量比較大。
  • 「教程分享」Jmeter入門教程
    回歸學長每周的教程分享!本期的Jmter教程就到這裡,下期繼續希望學長分享的內容對你我都有幫助Pandas系列文章django系列文章【Django教程】第15天:ORM性能優化和提升>【Django教程】第14天:debugtoolbar開發工具【Django教程】第13天:Email-郵件發送【Django教程】第12天:後臺管理-admin【Django教程】第11天:自定義模板過濾【Django教程】第10天:模板語【
  • 使用Python進行網站開發入門指南
    以一個博客網站為例,講解了基於django框架完成網站開發的全過程,通過本文的學習,讀者就可以快速掌握使用django完成網站開發的方法。本文有別於其他教程:網上大量django教程都非常全面,但是我們使用django開發一個中小型網站的時候,有許多東西並不會立即用到,所以可以暫時不用管它,本文就從這個點出發,抓住核心要點,讓大家在最短的時間內開發一個網站出來,然後再逐漸完善和發展,而不是要一口氣做一個大型系統。
  • 如何系統學 Django
    學習也是一樣,如果你不具備分辨好壞教程的能力,就有可能被不好的學習資料坑。浪費了時間和金錢,走了本不該走的彎路。誰也不是小白鼠,沒時間把所有資料都試一遍。分辨 Django 的學習資料時,有 4 個重要的篩選原則:2020 年 1 月 1 日,Python 2 版本就報廢了,最新的 Python 穩定版本是 3.7。