Django學習日記22

1.makemigrations和migrate工作原理
解析:
[1]makemigrations:根據檢測到的模型創建新的遷移。遷移的作用,更多的是將數據庫的操作,以文件的形式記錄下來,方便以後檢查、調用、重做等。
[2]migrate:使數據庫狀態與當前模型集和遷移集同步。就是將對數據庫的更改,主要是數據表設計的更改,在數據庫中真實執行。例如,新建、修改、刪除數據表,新增、修改、刪除某數據表內的字段等。

2.django.db.utils.IntegrityError:(1215, canot add foreign key constraint)
解析:
[1]在models.py中定義的User表繼承了django.contrib.auth中的User表
[2]python manage.py migrate在建表的過程中先創建了在models.py中創建的User表
[3]找不到父類的表,就出現can not add foreign key constraint這個錯誤

'OPTIONS': {"init_command": "SET foreign_key_checks = 0;"}

3.報錯django.db.migrations.exceptions.InconsistentMigrationHistory
解析:刪除所有的表,再次輸入migrate。

4.Django中的AppConfig
解析:
[1]django的project由多個app組成
[2]project的設置由setting指定
[3]每個app的設置由AppConfig指定
[4]app和project主要由INSTALL_APPS關聯,也有url和middleware等

5.set_password()方法和check_password()函數
解析:用於設置和檢查密碼。

6.Django信號量實現密碼更改
解析:django某些操作發生時,會觸發signals,可以截獲signals,並進行一些操作。在創建新用戶完成時,截獲signals,把保存的明文密碼修改爲密文,如下所示:

rom django.db.models.signals import post_save
from django.dispatch import receiver

from django.contrib.auth import get_user_model
User=get_user_model()

@receiver(post_save,sender=User)
def create_user(sender,instance=None,created=False,**kwargs):
    if created:
        instance.set_password(instance.password)
        instance.save()

在apps.py中導入接收函數,如下所示:

from django.apps import AppConfig

class UsersConfig(AppConfig):
    name = 'users'
    verbose_name = "用戶管理"
	
    def ready(self):
        import users.signals

7.Web應用2種登陸認證的形式
解析:
[1]用戶名和密碼認證登陸
[2]OAuth認證登陸

8.登錄流程
解析:登錄流程是在客戶端發送賬號密碼到服務端,服務端驗證成功後返回token存儲用戶的權限,前端用Cookie把token存儲在本地,在路由跳轉[router.beforeEach]中判斷是否存在token,另外前端可以通過token請求服務端獲取userInfo,在vuex中存儲着用戶的信息[用戶名,頭像,註冊時間等]。

9.XSS攻擊
解析:
[1]Reflected XSS[基於反射的XSS攻擊]
[2]Stored XSS[基於存儲的XSS攻擊]
[3]DOM-based or local XSS[基於DOM或本地的XSS攻擊]

10.原始設備製造商
解析:OEM生產,也稱爲定點生產,俗稱代工[生產],基本含義爲品牌生產者不直接生產產品,而是利用自己掌握的關鍵的核心技術負責設計和開發新產品,控制銷售渠道。

11.LoRa
解析:LoRa是semtech公司創建的低功耗局域網無線標準,低功耗一般很難覆蓋遠距離,遠距離一般功耗高。LoRa的名字就是遠距離無線電[Long Range Radio],它最大特點就是在同樣的功耗條件下比其它無線方式傳播的距離更遠,實現了低功耗和遠距離的統一,它在同樣的功耗下比傳統的無線射頻通信距離擴大3-5倍。

12.python3 manage.py migrate:?: (mysql.W002) MySQL Strict Mode is not set for database connection 'default’
解析:設置數據庫爲INNODB,爲第三方數據庫登錄用。

'OPTIONS':{'init_command':'SET sql_mode="STRICT_TRANS_TABLES",storage_engine=INNODB;'}

13.解決Django makemigrations出現No changes detected in app 'XXX’的問題
解析:自定義的model類必須繼承自models.Model。

14.三種Web服務交互方案
解析:
[1]REST[Representational State Transfer]:表徵性狀態轉移
[2]SOAP[Simple Object Access Protocol]:簡單的對象訪問協議
[3]XML-RPC[XML Remote Procedure Call]:基於XML的遠程過程調用

15.GenericAPIView
解析:
[1]GenericAPIView的作用:設置基礎變量
[2]queryset:指定了models.表名.object.all()數據來源
[3]serializer_class:指定了json解析類的方式
[4]lookup_field:指定檢索在url中指定的檢索的關鍵字
[5]CreateModelMixin:封裝了object的 post創建記錄的方法
[6]RetrieveModelMixin:封裝object的get的查詢單挑記錄的方法
[7]ListModelMixin:封裝了object的get的查詢所有記錄的方法
[8]UpdateModelMixin:封裝的object的put/patch的單挑記錄的更新的方法
[9]DestroyModelMixin:封裝object的delete的刪除單條記錄的方法

16.APIView支持定義的屬性
解析:
[1]authentication_classes:列表或元祖,身份認證類
[2]permissoin_classes:列表或元祖,權限檢查類
[3]throttle_classes:列表或元祖,流量控制類

17.rest_framework.generics.GenericAPIView
解析:繼承自APIVIew,增加了對於列表視圖和詳情視圖可能用到的通用支持方法。通常使用時,可搭配一個或多個Mixin擴展類。

18.DRF十大組件
解析:序列化組件,視圖組件,認證組件,權限組件,頻率組件,解析器,分頁器,響應器,url控制器,版本控制。

19.JSON渲染器
解析:‘rest_framework.renderers.JSONRenderer’

20.django原生wsgi的request
解析:request._request

21.RuntimeError: You called this URL via POST, but the URL doesn’t end in a slash and you have APPEND_SLASH set. Django can’t redirect to the slash URL while maintaining POST data. Change your form to point to 192.168.137.129:8000/wen_shi/ (note the trailing slash), or set APPEND_SLASH=False in your Django settings.
解析:在settings中修改APPEND_SLASH爲False[沒起作用],或者在訪問URL後面添加/。

22.Odoo一個應用,所有需求
解析:Odoo的定位清晰,針對中小企業在IT領域的一站式解決方案需求,打造了強大的框架基礎,包括高性能數據庫,真正copy即可安裝的模塊化,本地/託管/SaaS等多模式部署等等,確保中小企業能在一個平臺上無限擴展實現所有的IT需求。

23.EdgeX Foundry設備服務層微服務
解析:
[1]Virtual Device Service
[2]BACnet Device Service
[3]Modbus Device Service
[4]SNMP Device Service
[5]Blue Tooth Low Energy (BLE) Device Service
[6]Serial Device Service

24.Response(data, status=None, template_name=None, headers=None, content_type=None)
解析:REST framework提供了一個響應類Response,使用該類構造響應對象時,響應的具體數據內容會被轉換[render渲染]成符合前端需求的類型。

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (  # 默認響應渲染類
        'rest_framework.renderers.JSONRenderer',  # json渲染器
        'rest_framework.renderers.BrowsableAPIRenderer',  # 瀏覽API渲染器
    )
}

[1]data:爲響應準備的序列化處理後的數據。
[2]status:狀態碼,默認200。
[3]template_name:模板名稱,如果使用HTMLRenderer時需指明。
[4]headers:用於存放響應頭信息的字典。
[5]content_type:響應數據的Content-Type,通常此參數無需傳遞,REST framework會根據前端所需類型數據來設置該參數。

25.django時間類型
解析:DateTimeField,DateField,TimeField,這三種類型都有auto_add和auto_now_add,默認都爲False。
[1]auto_now=Ture:字段保存時會自動保存當前時間,但要注意每次對其實例執行save()的時候都會將當前時間保存,也就是不能再手動給它存非當前時間的值。
[2]auto_now_add=True:字段在實例第一次保存的時候會保存當前時間,不管在這裏是否對其賦值。但是之後的save()是可以手動賦值的。也就是新實例化一個model,想手動存其它時間,就需要對該實例save()之後賦值然後再save()。

參考文獻:
[1]HTTP訪問控制[CORS]:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章