Django
MarconiYe
这个作者很懒,什么都没留下…
展开
-
axios请求接收django服务端传入的错误信息
客户端有时向服务器发axios请求时,会收到一些错误信息,但往往只能得到HTTP错误码,这让前端工作时很难分辨错误的具体位置,为了解决这个问题,我们可以在DRF的Response内返回一个data数据来对错误分类:return Response('existed', status = status.HTTP_406_NOT_ACCEPCTABLE)这样我们在前端axios接收响应时可以通过response属性接收到这个数据axios(config).catch(err => { reject原创 2022-03-05 22:28:51 · 457 阅读 · 0 评论 -
DRF中从普通类视图APIView到视图集ViewSet的递进关系
我们在通过APIView编写其子类视图时,同Django本身的View类一样,可以在类中定义一些公共的属性,重写需要响应的请求类型函数,比如get,post等等,在路由中调用as_view()方法即可自动分配对应请求的响应体并且区别于View,APIView引入的一个新的request参数传入响应方法中,该参数可以在不同请求中接收客户端的数据二级视图(GenericAPIView)继承于APIView,提供两个重要的属性quertset和serialzer_class,并且提供一系列方法,在此基..原创 2022-03-01 22:55:02 · 341 阅读 · 0 评论 -
DRF中的ModelSerializer类的使用
在我们定义的序列化类中,定义一个Meta内部类,即可通过在类内添加属性来使用ModelSerializer类自动生成一个序列化器,下面是一些常用属性:model=Model:用来指定需要创建序列化器的模型类fields=[]: 该序列化器所需要的字段若需要所有字段则fields = '__all__'在外部类中如果定义一个新字段,那么该字段必须添加read_only = True属性,即代表该字段不可被写入数据库,这个功能可以用在验证码上,接收数据但不储存数据,引用官方文档上的话:Set t原创 2022-02-28 22:03:06 · 749 阅读 · 0 评论 -
DRF对传入服务端数据的反序列化校验
我们知道,通过POST等请求传入服务器的数据,即便都是JSON,但也有可能不符合服务器的需求,因此需要一层层的校验:校验时需要将这个序列化器对象调用is_valid(raise_exception = True)方法,其中raise_exception参数为True时,有校验失败的报错信息首先这些数据类型需要满足序列化器类中的字段类型,即char,date,integer等等,其次,需要满足这些字段属性的限制条件,比如:title = serializers.CharField(required原创 2022-02-28 20:30:48 · 651 阅读 · 0 评论 -
DRF框架模型序列化器的基本使用
首先我们需要定义一个序列化器类,在settings.py中注册了rest_framework后,引入序列化器基类:from rest_framework import serializers定义序列化器必须满足以下条件:序列化器类必须继承自 serializers.Serializer字段名,字段类型,以及字段属性必须与模型类一致,其中read_only=True,其中label与模型类中的verbose_name一致与定义模型类的方式极其类似,其中各种字段类型以及对应类型的各种属性.原创 2022-02-28 18:13:02 · 505 阅读 · 0 评论 -
Django解决GET请求中的数据在同视图函数中的POST请求中使用方法
在Django项目练习时,我通过从网址中的查询字符串得到的id值可以get出对应id的对象,但是我们发现在POST函数中需要用到这个对象时,已经不能用了,因为POST请求执行时已经从GET请求中return,因此这个id为空那么我们可以用cookies技术将这个id暂时储存在浏览器中,在POST请求使用完后将其删除即可...原创 2022-02-15 19:33:27 · 330 阅读 · 0 评论 -
Django框架中校验用户信息的装饰器解法
我们知道,一般来说用户登录之后,许多操作都需要校验用户信息,即利用cookies和session保持会话来通过用户校验,但如果每一个需要用户校验视图函数中都要写一段校验代码,不免有些太麻烦了,因此我们可以用python中的装饰器来解决这个问题,举例如下:后续只需在需要用户校验的视图函数前加上这个装饰器即可:如果对装饰器不熟悉的可以看下这个视频https://www.bilibili.com/video/BV11s411V7Dt?from=search&seid=12202536306210原创 2022-02-15 19:22:40 · 301 阅读 · 0 评论 -
Django密码的哈希算法储存
我们知道密码是用户的隐私数据,我们不能将真实的密码值储存在数据库中,这样是及其不安全的,因此我们可以用哈希算法来将一串明文密码转化为一串不可逆的值,也就是说即使有人拿到了数据库中的密码,也无法将其破解出明文,具体做法为:import hashlibm = hashlib.md5()'''md5可以相当于一个转化密码的工具这个工具具有唯一性也就是说,我们不能将这个对象用于两串密码的工具否则将会对这两串密码拼接生成密文md5为转码类型,也有其他类型,大多数都选择这个'''m.update(p原创 2022-02-15 19:13:05 · 3371 阅读 · 0 评论 -
Django中的Cookies和Session会话保持技术
想象一个情景,我们在逛淘宝时,首先浏览器会先我登录用户,并且把数据传入服务器,可是如果服务器没有合适的方法来储存处理这些数据,等到我们要下订单付款时浏览器要是把我们的账户忘了,那将会造成很不好的消费体验,因此,Django等大部分框架都提供了Cookies和session技术来处理这个问题。Cookies当浏览器向服务器发送请求时,服务器会将一些数据传回浏览器并储存在浏览器内部的内存中,这部分内存叫做cookies,每次发送请求时浏览器都会将一些数据上传到服务器来供服务器使用。在配置路由函数时,可以原创 2022-02-13 21:06:19 · 618 阅读 · 0 评论 -
Django-ORM中的关系映射
在DOM中,如果有两个表是需要关联的,但是关联方式有许多种:比如一个丈夫表和一个妻子表,这两个表是一一对应的,每一个丈夫数据对象只能对应一个妻子数据,此时就可以在丈夫或者妻子的类中设置一个对方的类属性举例如下:class Hunsband(models.Model): name = models.CharField('丈夫', max_length = 50)class Wife(models.Model): name = models.CharField('妻子', max_length =原创 2022-02-13 17:10:28 · 284 阅读 · 0 评论 -
Django-Admin管理后台的数据导入
在admin后台注册自己的模型类首先在app的admin.py文件中导入同目录下的models.py文件,之后调用注册函数:模型管理器为了让管理系统功能更全面,我们可以用模型管理器来完善具体操作为:在admin.py中创建一个admin.ModelAdmin类的子类,类中定义的所有类属性即为这些功能的设置,这里列举5个常用的属性:list_display = [key1,key2,...]如上图框2为显示需要显示的字段名称,系统自动会排版,并显示原先设置的verbose_name.原创 2022-02-12 17:49:32 · 729 阅读 · 0 评论 -
Django-ORM模型层数据库操作
举例数据库为:Mymodel.objects.{}增加数据create(key='value', ...)注意key|value要包含类中所有不能为空的字段修改数据all()返回的是一个QuerySet容器,以类似数组方式储存的所有数据对象。可以通过编写__str__函数来直观展现。类似SQL:values('key1','key2'...)返回所有数据对象的指定字段,以字典形式储存类似于SQL中的:values_list('key1','key2'..原创 2022-02-12 14:03:22 · 301 阅读 · 0 评论 -
Django中的url反向解析
在我们配置路由地址时,有时地址路径会很长,在视图或模板中可能会写错,此时我们就需要一个name参数来代替某个地址,比如:path('很长的path',views.test_view,name = 'test_path')配置好后,就相当于给这个"很长的路径"一个别名;在模板中需要用到时,我们可以通过url标签:{% url 'name' '参数1' ’参数2‘ ...%}其中的参数对应着path配置路由时设置的path转换器参数,比如page等等。而在视图函数中,我们可以通过调用rev原创 2022-02-08 17:38:08 · 1162 阅读 · 0 评论 -
Django中的path转换器
我们知道,在Django路由配置时,可以利用path函数配置一个路由,但当此时路径中某些值需要改变时,比如:其中的数字很大时,我们需要写许多个这样的path,此时我们可以通过path转换器来简化这个操作,即在需要改变的位置上加上如’<int:page>‘此时参数page就会被传入视图函数中作为参数使用,如下:def view(request, page): ...int也可以用str等代替...原创 2022-02-08 15:11:41 · 882 阅读 · 0 评论 -
Django框架中视图层与模板层之间的交互
在视图函数中,可以将变量封装在字典中并且传递给模板层:from shortcuts import renderreturn render(request, '模板文件名'(不需要具体路径),dict)如果函数中需要封装进字典的变量有许多,则可以利用locals()函数直接返回函数中的所有局部变量的字典,如:a = 1b = 2c = locals()# c = {'a':1,'b':2}而视图层将数据以字典方式传入模板层后,相对应的,模板层可以通过{{ key }}来直接返回对应的val原创 2022-01-31 08:08:53 · 324 阅读 · 0 评论 -
Django框架中的GET请求和POST请求
GET请求主要是客户端浏览器用来“获取”数据所发起的请求比如在path后面写的查询字符串?a=1&b=2就会以字典的方式存放在HttpRequest对象中,因此在视图层中,可以通过视图函数中传入的参数request来访问客户端所传入的数据:request.GET[key] #返回客户端传入字典的对应valuerequest.GET.get(key,value)#如果客户端传入的数据中没有key,则返回valuerequest.GET.getlist(key) #当key值对应的value不止原创 2022-01-31 07:25:05 · 728 阅读 · 0 评论