• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Python篇-Django框架詳解

    標簽: Django

    一 : 科普一分鐘

    Django 這個Web框架學習過的人無不知曉它的強大.
    Django是一個開放源代碼的Web應用框架,由Python寫成,采用了MT'V的框架模式.即Model,View,Template組成.許多成功的網站APP都基于Django.說到底,其實Django內部就是對 Socket 連接的強大封裝.

    Django.jpg

     

    二:Django配置和創建

    • 創建

    在這里我們不用命令,用PyCharm簡單的創建一個Django程序
    1 . 創建Django
    打開PyCharm - > File ->NewProject 進行創建

    創建項目.png

     

    1. 運行Django程序 瀏覽器訪問 http://127.0.0.1:8000/ 表示連接成功了!

      http://127.0.0.1:8000/.png

       

    2. 創建APP
      每個APP 相當于 項目中單獨的功能模塊,有著自己獨立的邏輯和數據,是項目的基本組成.
      命令行創建APP,在PyCharm->Terminalpython3 manage.py startapp TZmyApp 完成創建APP

    • 配置

    1. 配置靜態文件

    對于靜態文件,也就是 我們Templates存放html文件視圖所對應相關的JS,CSS,圖片存放的對方 通常我們在 程序目錄下建立一個文件夾->static(這里寫死就可以了,不要換別的名字)

    settings.py文件下添加如下配置,意思是在視圖對應的靜態文件會自動在static目錄下檢索

     

    STATICFILES_DIRS = (os.path.join(BASE_DIR,'static'),)
    

    2. 配置模板文件

    要是我們Templates存放的文件生效,需要如下配置,意思是模板文件在templates文件夾下進行檢索

     

    TEMPLATE_DIRS = (os.path.join(BASE_DIR,  'templates'),)
    
    

    三:Django結構分析

    • Django 程序
      Django - 對整個程序進行配置
      settings - 配置文件
      usls - url對應關系 對應邏輯函數 為每個邏輯函數 分配相應視圖
      wsgi - 遵循WSIG規范, uwsgi + nginx
      manage.py - #管理Django 程序

    • APP
      migrations 數據庫操作記錄->相應表結構發生變化,比如說字段類型,并不是增刪改成的變動
      admin Django 為我們提供的后臺管理
      apps 配置當前APP
      models ORM,寫指定的類通過命令可以創建數據庫結構.
      tests 單元測試
      Views 業務邏輯代碼

    四:Django原理講解

    • 業務流程原理

    url請求---->訪問路由系統(負責分發請求到相應視圖函數)------>視圖函數(處理請求)------>DataBase(數據庫操作數據生成對應頁面返回給用戶)

    • 底層實現原理

    本質是Django就是一個Socket服務端,用戶的瀏覽器其實就是一個Socket客戶端.用戶訪問網站的過程就是服務端與客戶端Socket通信的過程

     

    # Author:TianTianBaby
    import socket
    
    
    def handle_request(client):
        buf = client.recv(1024)
        client.send("HTTP/1.1 200 OK\r\n\r\n".encode())
    
        f = open('index.html', 'rb')
        data = f.read()
        client.send(data)
    
    
    def main():
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.bind(('localhost', 8000))
        sock.listen(5)
    
        while True:
            connection, address = sock.accept()
            handle_request(connection)
            connection.close()
    if __name__ == '__main__':
        main()
    

    五:Django登錄實現

    1. 在自己建立的APP 里的Views中添加邏輯函數 login
      render 這個模塊相當于一個 open讀取html文件中的數據返回給瀏覽器

     

    from django.shortcuts import render,redirect
    def login(request):
        # request 包含用戶提交的所有信息
        error_msg = ""
        if request.method == 'POST':
        # 獲取用戶通過post 提交過來的數據
            user = request.POST.get('user',None)
            pwd = request.POST.get('pwd',None)
            if user == 'admin' and pwd == "admin":
                #跳轉到響應頁面 ("/"相當于前面的地址127.1.0.0:8000)
                return redirect('/home')
            else:
                #用戶名密碼不匹配
                error_msg = "錯了 !!!!天啊!!"
    
       //error_msg 替換html文件 相同字段文字
        return render(request, 'login.html',{'error_msg':error_msg})
    

    2.登錄函數邏輯所對應的 templates文件中的login.html

     

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>login</title>
        <style>
    
            label{
    
                width: 80px;
                text-align: right;
                display: inline-block;
    
            }
        </style>
    </head>
    <body>
    
        <form action="/login/" method="post" style="background-color: cadetblue">
            <p>
                <label for="username">用戶名</label>
                <input id="username" name="user" type="text"/>
            </p>
            <p>
                <label for="password">密碼</label>
                <input id="password" name="pwd" type="text"/>
                <input type="submit" value="提交">
    
          //error_msg 替換請求 相同字段文字
                <span style="color: red">{{ error_msg}}</span>
            </p>
        </form>
    </body>
    </html>
    
    • 示例

       

      效果展示.gif

    1. 頁面數據的操作功能
      同樣的在自己建立的APP 里的Views中添加邏輯函數 home

     

    USER_LIST = []
    #
    # for index in range(20):
    #     tem = {'username':'雪芙'+str(index),'sex':'女','age':20+index}
    #     USER_LIST.append(tem)
    def home(request):
        if request.method == 'POST':
            #獲取用戶提交的數據 POST 請求中
            u = request.POST.get('username')
            s = request.POST.get('sex')
            a = request.POST.get('age')
            tem = {'username': u, 'sex': s, 'age':a}
            USER_LIST.append(tem)
    
    //當首次沒有數據時候,列表為空
        return  render(request,'home.html',{'user_list':USER_LIST})
    
    1. home函數邏輯所對應的 templates文件中的home.html

     

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>home</title>
    </head>
    <body style="margin: 0">
        <div style="height:48px;background-color: cadetblue"></div>
    
        <div>
            <form action="/home/" method="post">
                 <input type="text" name="username" placeholder="用戶名"/>
                 <input type="text" name="sex" placeholder="性別"/>
                 <input type="text" name="age" placeholder="年齡"/>
                 <input type="submit" value="添加">
            </form>
        </div>
    
        <div>
            <table>
              //頁面中的for循環寫法
                {% for row in user_list %}
                    <tr>
                    <td>{{ row.username }}</td>
                    <td>{{ row.sex }}</td>
                    <td>{{ row.age }}</td>
                </tr>
                {% endfor %}
            </table>
        </div>
    </body>
    </html>
    
    • 示例

       

      循環操作.gif

    六:總結

    Django的主要目的是簡便、快速的開發數據庫驅動的網站,Django有許多功能強大的第三方,本質是上是一個服務端的Socket連接,但是功能及其強大,封裝后的功能簡單易操作,深受廣大用戶喜愛.配合上模板頁面,數據處理,就可以建立自己的網站或者移動應用程序.



    其他參考:https://www.cnblogs.com/zenghui-python/p/10800165.html

    django進階一:https://www.jianshu.com/p/0e889b5ee95c

    django進階二:https://www.jianshu.com/p/437e2a437ff8

    版權聲明:本文為XTY00原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/XTY00/article/details/103619266

    智能推薦

    Python Django框架學習05:Django 模板

    在上一章節中我們使用 django.http.HttpResponse() 來輸出 "Hello World!"。該方式將數據與視圖混合在一起,不符合 Django 的 MVC 思想。 本章節我們將為大家詳細介紹 Django 模板的應用,模板是一個文本,用于分離文檔的表現形式和內容。 模板應用實例 我們接著上一章節的項目將在 HelloWorld 目錄底下創建 templat...

    Python Django框架學習09:Django 路由

    路由簡單的來說就是根據用戶請求的 URL 鏈接來判斷對應的處理程序,并返回處理結果,也就是 URL 與 Django 的視圖建立映射關系。 Django 路由在 urls.py 配置,urls.py 中的每一條配置對應相應的處理方法。 Django 不同版本 urls.py 配置有點不一樣: Django1.1.x 版本 url() 方法:普通路徑和正則路徑均可使用,需要自己手動添加正則首位限制符...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    猜你喜歡

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

    統計學習方法 - 樸素貝葉斯

    引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...

    styled-components —— React 中的 CSS 最佳實踐

    https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...

    精品国产乱码久久久久久蜜桃不卡