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

发布了400 篇原创文章 · 获赞 423 · 访问量 38万+

猜你喜欢

转载自blog.csdn.net/shengshengwang/article/details/104785111
今日推荐