计算机基础知识61

JsonResponse 功能例子

你自己写一个类,实现JsonResponse 功能,不需要传safe=False,无论字典或列表,都能完成序列化返回给前端

1

响应头例子

四种情况,在响应头返回数据  xx=xx
 # 第一种情况 JsonResponse

def show(request):
# 方式一return JsonResponse({'fjw': 123}, headers={'xx': 'xx'})
# 方式二 # 后面headers可以同时用  也可以删掉res = JsonResponseres['name'] = 'glwnnb'return res

# 第二种情况 HttpResponse

def show(request):
# 方式一res = HttpResponse('123')res.set_cookie('name', 'genglianwen')
# 方式二res = HttpResponse('123')res['name'] = 'glwnb'return res

# 第三种情况 Redirect

def show(request):res = redirect("/admin/")res['lw'] = 'i am geng lianwen'return res

# 第四种情况 render

def show(request):res = render(request, 'up_image.html')res['name'] = 'glw'return res
t = Template('<html><body>:<h1>{{name}}nb </h1></body></html>

面向对象绑定给类方法例子

绑定给类的方法,类来调用,对象可以调用吗?如何用

# 加一个装饰器@classmethod,把方法的第一个形参改为cls

  会把类自动当成第一个参数传递给方法的第一个形参cls

可以调用

class MyClass:@classmethoddef index(cls):     # cls:就是类print("hello index")
obj = MyClass()
obj.index()    # hello index

面向对象绑定给对象方法例子

绑定给对象的方法,对象来调用,类可以调用吗?如何用

#  默认情况下,在类内部写方法是绑定给对象的,就有对象来调用,就会自动来传递参数

         绑定给对象的方法,类也能调用,但是方法中需要传递几个就要传几个,包括self

class Student():school = 'SH'def __init__(self, name, age, gender):self.name = nameself.age = ageself.gender = genderdef tell_info(self, username, password):print("name:%s  %s %s" % (self.name, username, password))
stu = Student('ly', 20, 'male')
stu.tell_info('kevin', 123)             # self自动来传递参数
Student.tell_info(stu , 'kevin' ,123)   # 需要传递几个就要传几个,包括self

上传文件例子

写个图片上传功能,图片保存在根路径media文件夹下

        上传成功直接在前端显示出上传的图片

setting.py
import os
TEMPLATES = ['DIRS': [os.path.join(BASE_DIR,'templates')]]MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
urls.py
from django.contrib import admin
from django.urls import path,re_path
from django.conf.urls import static
from django.conf import settings
from django.views.static import serve
from app01 import viewsurlpatterns = [path('admin/', admin.site.urls),path('tupian/', views.FileView.as_view()),re_path('media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT}),
]
views.py
from django.shortcuts import render, HttpResponse
# Create your views here.
from django.views import Viewclass FileView(View):def get(self, request):return render(request, 'tupian.html')def post(self, requst):# 拿出文件# {'mytupian': [<InMemoryUploadedFile: 1701262155217.jpg (image/jpeg)>]}my_tupian = requst.FILES.get('mytupian')# print(my_tupian.name)import osbasr_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))dizi = os.path.join(basr_dir, 'media', my_tupian.name)with open(my_tupian.name, 'wb') as f:with open(dizi, 'wb') as f1:for line in my_tupian:f1.write(line)return render(requst,'tupian.html',locals())
tupian.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data"><input type="file" name="mytupian"><br><input type="submit" value="提交">
</form>
{#前端展示#}
<div>{% if my_tupian %}<img src="../media/{{ my_tupian.name }}" alt="">{% endif %} 
</div>
</body>
</html>

for标签例子

建个表---》插入100条数据---》写个页面,for循环把100条数据显示在页面上

2、

3、

自定义过滤器例子:

写一个过滤器---》一堆内容---》经过过滤器后---》把关键词屏蔽
高级:关键词放到一个列表中,可以随时增加,不需要重启项目,数据可以放在数据库中

# 自定义过滤器:{{变量|过滤器名字}}

# 编写步骤:
        1 注册app
        2 在某个app下:创建templatetags模块(模块名只能是templatetags)
        3 在包下写一个py文件,随便命名
        4 在py文件中:写入

         5 定义自己的标签或过滤器

        6 在模板中使用

templatetags/zjqfilter.py
from django import template
register = template.Library()  # register的名字是固定的,不可改变@register.filter
def filter_words(content: str) -> str:l = ['妈的', '傻逼', '退游']# 把content中所有关键词,替换,返回for item in l:content = content.replace(item, "**")return content@register.simple_tag
def my_input(id,arg):result = "<input type='text' id='%s' class='%s' />" %(id,arg)return mark_safe(result)
{% load zjqfilter %}    
<p>{{ content|filter_words}}</p>  
{% my_input 7 'red' %}

视图层补充:响应对象

# 响应的本质都是 HttpResponse,是字符串    

render:放个模板,模板语法是在后端执行的
redirect:重定向,字符串参数不是是空的,状态码是 3开头
JsonResponse:json格式数据,如果想往响应头中写数据,需要传headers={'xx':'xx'}
js代码:在客户端浏览器里执行的

# JsonResponse源码分析:

return JsonResponse({name:lqz,age:19})     
# 触发  JsonResponse的__init__--->{name:lqz,age:19}给了data
def __init__(self, data, encoder=DjangoJSONEncoder, safe=True,json_dumps_params=None, **kwargs):# 如果传入的四字典# safe是True,后面是False,条件不符合,内部就不会走# isinstance(对象, 类) 判断这个对象,是不是这个类的对象if safe and not isinstance(data, dict):raise TypeError('In order to allow non-dict objects to be serialized set the ''safe parameter to False.')if json_dumps_params is None: # 条件符合json_dumps_params = {}# kwargs是字典---》setdefault--》有则修改,无则新增kwargs.setdefault('content_type', 'application/json')# 核心---》把字典转成json格式字符串,赋值给datadata = json.dumps(data, cls=encoder, **json_dumps_params)# super().__init__ 调用父类的 __init__ 完成实例化---》HttpResponse的对象return HttpResponse(data,**kwargs)super().__init__(content=data, **kwargs)

        本质是把传入的字典或列表(必须指定safe=False),使用json序列化得到json格式字符串,最终做成HttpResponse返回给前端,如果想给json序列化的时候,传参数,必须使用json_dumps_params字典传入

cbv和fbv

# fbv:基于函数的视图,之前写的全是fbv
# cbv:基于类的视图,后续全是cbv

from django.views import View
class UserView(View):# 写方法---》跟请求方式同名的方法def get(self,request,*args,**kwargs)必须返回四件套

# 路由配置:  path('index/', 视图类名.as_view())     # as_view是类的绑定方法

源码分析:

urls.py
path('index/', index),    # 请求来了,路由匹配成功会执行 index(request,) 
path('index/', UserView.as_view()),

# 请求来了,路由匹配成功:

        1、执行 UserView.as_view()(request)
        2、as_view() 执行结果是 view,本质就是在执行 view(request)

        3、本质在执行  self.dispatch(request, *args, **kwargs)

# 方法,可以加括号调用
def view(request, *args, **kwargs):        return self.dispatch(request, *args, **kwargs)

# 去UserViwe类中找----找不到----去父类View中找dispatch,代码如下:

 def dispatch(self, request, *args, **kwargs):# request当次请求的请求对象,取出请求方式【假设是get请求】,转成小写 'get'# http_method_names = ['get', 'post', 'put']# 条件成立,执行if内部代码if request.method.lower() in self.http_method_names:#getattr:反射---》通过字符串去对象中取属性或方法# self是谁的对象? 是View这个类的对象,这个是视图类UserView的对象# 取出来的handler 是 UserView这个类的get方法handler = getattr(self, 'get')else:handler = self.http_method_not_allowed# handler是 UserView这个类的get方法# get(request)---》触发UserView这个类的get方法---》真正执行原来视图函数的内容# 最终返回return handler(request, *args, **kwargs)
"""总结:写cbv,只需要在视图类中写跟请求方式同名的方法即可--》不同请求方式,就会执行不同的方法"""

类中的self

class Animal:def run(self):# 这个self,是谁调用,就是谁print(type(self))print(self.name, '走路')
class Person(Animal):def __init__(self, name):self.name = name
class Dog(Animal):def __init__(self, name,age):self.name = nameself.age=age
# p = Person('lqz')
# p.run()  #
dog=Dog('小奶狗',6)
dog.run()

###  self 是谁调用。self就是谁,不能只看是哪个类
### 以后看到self.方法的时候,不要只从当前类,或父类中找,应该先确定当前self是谁,然后从这个对象的类根上开始找

上传文件

## 关于模板查找路径是配置文件中

setting.py/TEMPLATES
'DIRS': [os.path.join(BASE_DIR, 'templates')]

## python

class FileView(View):def get(self,request):return render(request,'file.html')def post(self,request):# 拿出文件对象my_file=request.FILES.get('myfile')print(type(my_file)) #django.core.files.uploadedfile.InMemoryUploadedFile 跟之前用的文件对象不一样但是,它应该继承了文件from django.core.files.uploadedfile import InMemoryUploadedFile# 1 保存  2 取出文件名字# my_file.save() #找了一顿,没有,所以不能使用快捷保存方式,需要自己写保存print(my_file.name) # 3-回顾django.md# 自己写保存,放在项目根路径下with open(my_file.name,'wb') as f:for line in my_file:f.write(line)return HttpResponse('上传成功')
# html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title></head>
<body>
<form action="" method="post" enctype="multipart/form-data"><input type="file" name="myfile"><br><input type="submit" value="提交">
</form>
</body>
</html>

模版层

1、介绍:

        模板在浏览器中是运行不了的,因为它有 模板语法,浏览器解析不了模板语法

        必须在后端渲染完成,变成纯粹的html,css,js

        模板语法:django template language,在后端会被渲染的类python语法

2、django模板修改的视图函数:

from django.template import Template,Context
now=datetime.datetime.now()
# 内部打开了这个模板---》读出所有内容,实例化得到了t对象
t=Template('<html><body>现在时刻是:<h1>{{current_date}}</h1></body></html>')
# #t=get_template('current_datetime.html')
c=Context({'current_date':str(now)})
html=t.render(c)
return HttpResponse(html)
#另一种写法(推荐) 
import datetime
now=datetime.datetime.now()
return render(req, 'current_datetime.html', {'current_date':str(now)[:19]})  

 # 总结:咱们之前这么写

render(request,'模板名字',context={key:value,key1:value})
本质是:t=Template('<html><body>现在时刻是:<h1>{{current_date}}</h1></body></html>')c=Context({'current_date':str(now)})html=t.render(c) # 返回是字符串HttpResponse(html)

3、页面静态化#######

def index(request):1 判断 cache文件夹下有没有 index.html  纯静态页面2 如果没有:干下面的事books = Book.object.all()t = Template('<html><body>现在时刻是:<h1>{{current_date}}</h1></body></html>')# #t=get_template('current_datetime.html')c = Context({'books':books})html = t.render(c)#保存到某个文件中  cache文件夹下 index.html 3 如果有那个文件,打开文件---》HttpReponsebooks=Book.object.all()return render(request,'index.html',{books:books})

4、模板语法###

变量:{{ 变量名 }}        #字典/列表/对象通过.拿到属性或方法

字典:dic.name--->这不是python语法    dic['name']    dic.get('name')
列表:list.2--->这不是python语法      list[0]
对象:person.name---->是python语法
person.run---->不是python语法,会自动加括号,把run的返回值放在模板中,不支持传参数
1 深度查询 用句点符
2 过滤器
3 标签:{{% % }}

5 内置过滤器####

pythohn:render(request,'index.html',{now:当前时间对象})
html:{{ now | date:"Y-m-d H:i:s" }}
safe:把标签字符串 渲染成标签
'<a href=""></a>'  

# 模板语法l是不存在xss(跨站脚本攻击)攻击的
        {{s}}   不会渲染成标签,没有xss攻击
        我们知道s是安全的,我们可以使用safe标签,把它渲染成真正的标签

6、标签for  if ...  for和if用法是重点

for:
def test(request):names=['egon','kevin']return render(request,'test.html',locals())<hr>
{% for name in names %}<p>{{ forloop.counter0 }} {{ name }}</p>
{% endfor %}
<!--
输出结果为:0 egon1 kevin
<hr>
if:
{% if num > 100 or num < 0 %}<p>无效</p>
{% elif num > 80 and num < 100 %}<p>优秀</p>
{% else %}<p>凑活吧</p>
{% endif %}

7、模板导入 include

        写好一段前端代码块,以后别的页面要用,直接 {% include 'little.html' %}

### python代码:
def index(request):return render(request, 'index.html', {'name': '彭于晏'})
little.html
<div><h1>我是广告</h1><p>亚洲最大同性交友平台</p><p>名字是:{{ name }}---诚信交友</p>
</div>
导入:
<div>{% include 'little.html' %}  
</div>

# 总结:
    -1 {{变量}}  {{变量.取值}}
    -2 {%for%}
    -3 {%if%}
    -5 内置过滤器 :data,length。。。
    -6 include
    -7 extends使用

今日思维导图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/210298.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python调用腾讯云短信服务发送手机短信

文章目录 1、准备工作2、代码实现3、拓展4、闲聊关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 1、准备工作 p…

身份统一管理创新与优化 ——华为云OneAccess应用身份管理服务的2023年

2023年&#xff0c;随着云计算、物联网、人工智能等技术的快速发展&#xff0c;企业面临着数字化转型的巨大挑战与机遇。身份统一管理是企业数字化转型的基础&#xff0c;也是业务发展的关键。如何高效、安全、灵活地实现身份统一管理&#xff0c;成为企业亟待解决的首要课题。…

硬盘分区丢失?这样轻松恢复!

​“在我安装操作系统的过程中&#xff0c;我先把C盘&#xff08;100G&#xff09;进行了格式化&#xff0c;而我的D盘大小为297G&#xff0c;然而在Win PE中&#xff0c;所显示的仅是247G&#xff08;CD盘总容量&#xff09;&#xff0c;这247G是空无一物的。让我感到困惑的是…

D7292 双向直流电机驱动电路 ( 速度可控 ) 7V~20V 400mA,峰值电流可达1.2A 采用DIP8、SOP8的封装形式

D7292是一块带有制动和速度控制功能的双向直流电机单片电路。它可以用来驱动CDP、VCR 和 TOY等负载。该电路通过两个逻辑输入管脚的电压&#xff0c;可以控制电机正反 个方向转动以及制动。并且可以通过改变速度控制管脚的电压&#xff0c;从而方便的改变电机的速度。D7292采用…

前端项目中CDN的一些问题【性能优化篇】

1. CDN的概念 CDN&#xff08;Content Delivery NetWork&#xff0c;内容分发网络&#xff09;&#xff0c;是指利用最靠近每位用户的服务区&#xff0c;更快的将资源发送给用户。 提高用户的访问速度减轻服务器压力提高网站的稳定性和安全性 2. CDN的作用 CDN一般用来托管…

WPF绘制进度条(弧形,圆形,异形)

前言 WPF里面圆形进度条实现还比较麻烦,主要涉及到的就是动态绘制进度条的进度需要用到简单的数学算法。其实原理比较简单,我们需要的是话两条重叠的弧线,里面的弧线要比里面的弧线要宽,这样简单的雏形就出来了。 基础写法 我们可以用Path来绘制弧线,代码如下: <Gr…

双向ESD保护 汽车级TVS二极管 ESD9B3.3ST5G工作原理、特性参数、封装形式

什么是汽车级TVS二极管&#xff1f; TVS二极管是一种用于保护电子电路的电子元件。它主要用于电路中的过电压保护&#xff0c;防止电压过高而损坏其他部件。TVS二极管通常被称为“汽车级”是因为它们能够满足汽车电子系统的特殊要求。 在汽车电子系统中&#xff0c;由于车辆启…

怎么对文件加密?文件加密软件操作保姆式演示!

大家是不是遇到过这种情况&#xff0c;文件一个不小心就被别人轻易外发出去&#xff0c;并且还是特别重要的内容。在企业中这种现象已经非常常见啦。 今天就给友友们&#xff0c;分享一款神器&#xff0c;它可以让你点点鼠标&#xff0c;就对企业的重要文件进行加密。 1、获取…

Hdoop学习笔记(HDP)-Part.17 安装Spark2

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

[HTML]Web前端开发技术6(HTML5、CSS3、JavaScript )DIV与SPAN,盒模型,Overflow——喵喵画网页

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;佬佬会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…

分享67个节日PPT,总有一款适合您

分享67个节日PPT&#xff0c;总有一款适合您 67个节日PPT下载链接&#xff1a;https://pan.baidu.com/s/1oU-UUCV_69e8Gp5Y6zrzVA?pwd6666 提取码&#xff1a;6666 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易…

Interpretable Multimodal Misinformation Detection with Logic Reasoning

原文链接 Hui Liu, Wenya Wang, and Haoliang Li. 2023. Interpretable Multimodal Misinformation Detection with Logic Reasoning. In Findings of the Association for Computational Linguistics: ACL 2023, pages 9781–9796, Toronto, Canada. Association for Computa…

uniapp自定义进度条组件

目标效果 原型设计为这样的样式&#xff0c;但是现有的进度条组件样式都无法满足需求&#xff0c;于是编写组件实现。 设计引用格式为 <zLineProgress :total"15" :val"7" title"你好吗" />定义组件 <template><view style&…

递增子序列(回溯)

题目描述 给你一个整数数组 nums &#xff0c;找出并返回所有该数组中不同的递增子序列&#xff0c;递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素&#xff0c;如出现两个整数相等&#xff0c;也可以视作递增序列的一种特殊情况。 样例…

继上海车展后,英信翻译再进广州车展大显身手

第二十一届广州车展于2023年11月17日-26日在广州琶洲盛大举行 &#xff0c;历时十天的展会共吸引到场观众84.7万人次&#xff0c;举办了67场新闻发布会&#xff0c;近5000家海内外媒体机构的1.2万名媒体人员参与报道了展会盛况&#xff0c;再创历史新高。本届广州车展在国内外企…

Oracle(2-9) Oracle Recovery Manager Overview and Configuration

文章目录 一、基础知识1、User Backup VS RMAN2、Restoring &Recovering DB 还原&恢复数据库3、Recovery Manager Features 管理恢复功能4、RMAN Components RMAN组件5、Repository1: Control File 存储库1:控制文件6、Channel Allocation 通道道分配7、Media Manageme…

解决IDEA springboot“spring-boot-maven-plugin“报红问题方法

本篇文章小编给大家分享一下解决IDEA springboot"spring-boot-maven-plugin"报红问题方法&#xff0c;文章代码介绍的很详细&#xff0c;小编觉得挺不错的&#xff0c;现在分享给大家供大家参考&#xff0c;有需要的小伙伴们可以来看看。 使用环境 项目环境&#x…

CodeTON Round #7 (Div. 1 + Div. 2) A~E

A.jagged Swaps&#xff08;思维&#xff09; 题意&#xff1a; 给出一个包含 n n n个数字的序列&#xff0c;每次可以选择一个同时大于左右两边相邻的数字&#xff0c;将这个数字与它右边的数字交换&#xff0c;问能否在经过若干次操作后使序列变为升序。 分析&#xff1a;…

华为S9700S-S无线控制器修改SSID密码

PS&#xff1a;在两台无线控制器做了VRRP的情况下&#xff0c;只能在Master上面修改&#xff0c;Slave没有修改权限&#xff0c;密码是以密文的方式存在&#xff0c;看不到密码本身字符 软件版本&#xff1a;Version 5.170 (AirEngine9700S-S V200R020C00SPC300) AP配置→AP组…

Find My保温杯苹果Find My技术与保温杯结合,智能防丢,全球定位

保温杯一般是由陶瓷或不锈钢加上真空层做成的盛水的容器&#xff0c;顶部有盖&#xff0c;密封严实&#xff0c;真空绝热层能使装在内部的水等液体延缓散热&#xff0c;以达到保温的目的。几乎每一款保温杯都有自己与众不同的特点&#xff0c;有的是双重盖设计&#xff0c;开车…