• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • django基礎02

    django基礎02

    1、使用虛擬環境建django項目

    • 1、workon 虛擬環境命令

    • 2、創建django項目 django-admin starproject 項目名

    • 3、創建app python manage.py startapp 應用名

    • 4、更改配置

    • 注冊app

    • 更改大路由包含所有的小app里的路由

    • app里寫url和對應的views

    • libs 存放第三方包

    • media 靜態文件

    • utils 存放自己的方法 可以公用的

      ① 、為了方便管理app,我們添加專門的apps文件夾來存放所有的app。結構如下

    img

    1.1設置完apps文件夾以后我們需要對配置文件做相應的更改

    1.1.1、在seetings.py里添加django文件的導包路徑

    #settings.py 
    
    import sys 
    sys.path.insert(0, os.path.join(BASE_DIR,'apps'))
    

    img

    1.1.2、django的導包路徑添加完畢,這時候可以像原來一樣引用文件了。但是這時候你的pycharm編輯器還是不能正確的顯示導包總是給你報紅。

    img

    1.1.3、這時候你需要把apps這個文件夾設為源碼根即可解決這個問題

    img

    ②、添加libs存放第三img

    img

    ③、添加utils文件夾存放封裝的公用

    img

    ④、添加media存放圖片

    img

    ⑤、創建static手機模板的靜態文件

    img

    2、添加sys.path的作用?

    ? import sys

    ? sys.path.insert(0, os.path.join(BASE_DIR, ‘apps’))

    ? 增加導包路徑

    3、base_dir的作用?

    ? manage.py文件的路徑

    4、RESTFUL風格API

    1.1 什么是RESTful
    • REST與技術無關,代表的是一種軟件架構風格(REST是Representational State Transfer的簡稱,中 文翻譯為“表征狀態轉移”)

    • REST從資源的角度類審視整個網絡,它將分布在網絡中某個節點的資源通過URL進行標識

    • 所有的數據,不過是通過網絡獲取的還是操作(增刪改查)的數據,都是資源,將一切數據視為資 源是REST區別與其他架構風格的最本質屬性

    • 對于REST這種面向資源的架構風格,有人提出一種全新的結構理念,即:面向資源架構(ROA: Resource Oriented Architecture)

    1.2web開發本質
    • 對數據庫中的表進行增刪改查操作
    • Restful風格就是把所有數據都當做資源,對表的操作就是對資源操作
    • 在url同通過 資源名稱來指定資源
    • 通過 get/post/put/delete/patch 對資源的操作

    5、RESTFUL API設計規范

    • 1.API與用戶的通信協議,總是使用HTTPs協議。

    • 2.域名

      1)子域名方式  
      https://api.example.com 盡量將API部署在專用域名(會存在跨 域問題)   
      https://www.example.com

      2)url方式
      https://example.org   
      https://example.org/api/ API很簡單

    • 3.版本
    URL,如:https://api.example.com/v1/ 
    請求頭       跨域時,引發發送多次請求
    
    • 4.面向資源編程 : 路徑,視網絡上任何東西都是資源,均使用名詞表示(可復數)
    https://api.example.com/v1/zoos 
    https://api.example.com/v1/animals
    https://api.example.com/v1/employees
    
    • 5.method
    GET(查詢數據)     # 從服務器取出資源(一項或多項) 
    POST(創建數據)    # 在服務器新建一個資源 
    PUT(修改數據)     # 在服務器更新資源(客戶端提供改變后的完整資源) 
    PATCH(修改屬性)   # 在服務器更新資源(客戶端提供改變的屬性) 
    DELETE(刪除數據)  # 從服務器刪除資源
    
    • 6.過濾,分頁,排序 :通過在url上傳參的形式傳遞搜索條件
    https://api.example.com/v1/zoos?limit=10:指定返回記錄的數量 
    https://api.example.com/v1/zoos?offset=10:指定返回記錄的開始位置 
    https://api.example.com/v1/zoos?page=2&per_page=100:指定第幾頁,以及每頁的記錄數 
    https://api.example.com/v1/zoos?sortby=name&order=asc:指定返回結果按照哪個屬性排序, 以及排序順序 
    https://api.example.com/v1/zoos?animal_type_id=1:指定篩選條件
    
    • 狀態碼
    '''1. 2XX請求成功''' 
    # 200 請求成功,一般用于GET與POST請求 
    # 201 Created - [POST/PUT/PATCH]:用戶新建或修改數據成功。 
    # 202 Accepted - [*]:表示一個請求已經進入后臺排隊(異步任務) 
    # 204 NO CONTENT - [DELETE]:用戶刪除數據成功。 
    
    '''2. 3XX重定向''' 
    # 301 NO CONTENT - 永久重定向 
    # 302 NO CONTENT - 臨時重定向 
    
    '''3. 4XX客戶端錯誤''' 
    # 400 INVALID REQUEST - [POST/PUT/PATCH]:用戶發出的請求有錯誤。 
    # 401 Unauthorized - [*]:表示用戶沒有權限(令牌、用戶名、密碼錯誤)。 
    # 403 Forbidden - [*] 表示用戶得到授權(與401錯誤相對),但是訪問是被禁止的。 
    # 404 NOT FOUND - [*]:用戶發出的請求針對的是不存在的記錄。 
    # 406 Not Acceptable - [GET]:用戶請求的格式不可得(比如用戶請求JSON格式,但是只有XML格 式)。 
    # 410 Gone -[GET]:用戶請求的資源被永久刪除,且不會再得到的。 
    # 422 Unprocesable entity - [POST/PUT/PATCH] 當創建一個對象時,發生一個驗證錯誤。 
    
    '''4. 5XX服務端錯誤''' 
    # 500 INTERNAL SERVER ERROR - [*]:服務器內部錯誤,無法完成請求 
    # 501 Not Implemented     服務器不支持請求的功能,無法完成請求
    
    
    更多狀態碼參考:https://www.runoob.com/http/http-status-codes.html
    

    6、django和Drf的不同點

    django中封裝了drf

    view 是 父類

    class test1(View):
         def post(self,request):
              data=request.POST.get('name')
              return HttpResponse(data)
         def get(self,request):
              data = request.GET.get('name')
              return HttpResponse(data)
    

    apiview是view的子類

    class test2(APIView):
         def get(self,request):
              data=request.query_params
              return Response(data)
         def post(self,request):
              data=request.data
              return Response(data)
    

    7、django不使用序列化器來進行查詢結果序列化

    # from django.http import JsonResponse
    
    # from django.views import View
    
    # from .models import *
    
    # class App03(View):
    
    #     def get(self,request):
    
    #         user=User.objects.all()
    
    #         list=[]
    
    #         for i in user:
    
    #             data={
    
    #                 'name':i.username,
    
    #                 'age':i.age,
    
    #                 'home':i.home
    
    #             }
    
    #             list.append(data)
    
    #             print(list)
    
    #             return JsonResponse({'data':list})
    

    8、DRF使用Serializer來進行序列化和反序列化操作

    1、定義一個序列化器
    # 這里的字段需要和模型類中的字段名、字段類型、約束一致
    class UserSer(serializers.Serializer):
        username=serializers.CharField(max_length=20)
        age=serializers.IntegerField(allow_null=True)
        home=serializers.CharField(max_length=30)
    

    想要添加數據 就需要在序列化器類中定義一個create()方法

      def create(self, validated_data):
        		 '''
                序列化器進行新增數據的方法
                :param validated_data: 通過驗證的字典數據
                :return:根據RESTful設計方式,需要將添加的數據返回
                '''
            return User.objects.create(**validated_data)
    

    想要修改數據時,需要在序列化器類中定義一個update()方法。

    def update(self,instance,validated_data):
         '''
            序列化器進行修改數據的方法
            :param instance: 需要修改的模型對象
            :param validated_data: 前端傳遞的字典數據
            :return: 根據RESTful設計方式,需要將修改的數據返回
            '''
        # instance   你的數據庫里的模型
        # validated_data     傳進來要修改的數據
        instance.username=validated_data.get('username',instance.username)
        instance.age=validated_data.get('age',instance.age)
        instance.home=validated_data.get('home',instance.home)
        instance.save()
        return instance
    

    單一字段驗證 對單一字段進行驗證我們需要在序列化器類中定義一個名字為(validate_字段名)的方法,來補充驗證邏輯。

    # def validated_username(self,attrs):     
    
    #     if attrs !='gy':
    
    #         raise serializers.ValidationError('不是gy本人')
    
    #     return attrs
    

    多字段驗證 對所有字段進行擴展驗證我們需要在序列化器中定義一個名字為(validate())的方法,來補充對所有字段進行擴展驗證的邏輯。

    def validate(self, attrs):  
    	'''
            對多個字段進行驗證
            :param attrs: 前段傳遞的字典數據
            :return: 驗證成功:返回attrs;驗證失敗:返回錯誤信息
            '''
        username = attrs['username']
        age=attrs['age']
        home=attrs['home']
        print(username)
        if username != 'gy' or age!=18 or home!='河南':
        	# 失敗
            raise serializers.ValidationError('不是gy本人')
          # 成功
        return attrs
    
    
    class UserV(APIView):
        def get(self,request):
            users=User.objects.all()
            ser=UserSer(users,many=True)      #many=True  序列化多條數據
            data=ser.data
            return Response(data)
    
        def post(self,request):
            data=request.data
            ser=UserSer(data=data)
            ser.is_valid()
            
             # 打印的是sers.py里的  raise serializers.ValidationError('不是gy本人')
            print(ser.errors)    
            ser.save()
            return Response({'code':200})
    
        def put(self,request):
            data=request.data
            id=request.data.get('id')   
            print(data)
            print(id)
            user=User.objects.get(id=1)
            print(user)
            ser=UserSer(user,data=data)
            ser.is_valid()
            ser.save()
            return Response({'code':200})
    
    版權聲明:本文為weixin_46690856原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/weixin_46690856/article/details/109321500

    智能推薦

    Django基礎

    web框架的本質 所有的Web應用本質上就是一個socket服務端,而用戶的瀏覽器就是一個socket客戶端,基于請求做出響應,客戶都先請求,服務端做出對應的響應,按照http協議的請求協議發送請求,服務端按照http協議的響應協議來響應請求 socket模擬簡單框架 Django下載、安裝、配置: 下載 可以自己指定安裝的版本號 創建項目: 創建應用: 啟動項目: 配置settings 應用配置...

    Django基礎

    我自己的Django版本是2.1,pyhton是3.7,數據庫是mysql5.6 搭建一個Django web框架,知道Django中models,views,urls的作用基本就差不多完成了。先大致說一下Django的運行流程。當我們運行Django是,在沒有錯誤的情況下,我們在瀏覽器中輸入 http://127.0.0.1:8000/就可以訪問到我們的網頁了。在輸入網站訪問的時候,Django...

    Django基礎

    Django基礎 一:安裝django 二:路由層 2.1 path與re_path函數 2.2 url的反向解析 三:視圖層 3.1 HttpRequest對象屬性 3.2 HttpResponse對象 四:模板層 4.1 模板變量 4.2 模板語法之過濾器 4.3 模板標簽 4.4 靜態文件的載入 4.5 自定義過濾器 4.6 verbatim標簽 五:AJAX請求 六:狀態保持 6.1 co...

    Django基礎

    一、HTTP協議(應用層協議) 2、HTTP 協議概述 3、HTTP 工作原理 4、URL :統一資源定位符,用來確定互聯網中的唯一資源。 5、HTTP請求格式 6、HTTP相應格式...

    Django 基礎

    Python的WEB框架有Django、Tornado、Flask 等多種,Django相較與其他WEB框架其優勢為:大而全,框架本身集成了ORM、模型綁定、模板引擎、緩存、Session等諸多功能。 一、基本配置 1、創建django項目 2、創建django應用 3、啟動django程序 4、創建超級管理員 5、和數據庫相關的命令    二、程序目錄 三、配置文件 1、數據庫 備注: (1)在...

    猜你喜歡

    Django基礎

    一、常用命令 二、配置文件 配置 讀取配置文件 django中讀取settings文件源碼 補充:根據字符串的形式,自動導入模塊并使用反射找到模塊中的類,執行指定的方法 run.py django入口 三、urls:路由分發 例子 django2.0版的path 使用尖括號(<>)從url中捕獲值。 捕獲值中可以包含一個轉化器類型(converter type),比如使用 捕...

    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壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

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