首页 > 其他分享 >django框架-4

django框架-4

时间:2022-09-04 17:58:28浏览次数:47  
标签:return 框架 django html def HttpResponse 模板 view

目录

网页伪静态

将动态网页伪装成静态网页 从而提升网页被搜索引擎收录的概率
(掏点票票 更快更能提高搜索频率)
表现形式就是网址乍一看像一个具体的文件路径

视图层

1.视图函数的返回值问题
	视图函数必须返回一个HttpResponse对象
	注意HttpResonse其实是一个类

image

class HttpResponse(HttpResponseBase):
            pass
   		def render():
            return HttpResponse(...)
       def redirect(to, *args, permanent=False, **kwargs):
        redirect_class = HttpResponsePermanentRedirect if permanent else HttpResponseRedirect
        return redirect_class(resolve_url(to, *args, **kwargs))


"""
敲黑板:三板斧本质底层源码都是继承 HttpResponse对象
"""
2.视图函数返回json格式数据
运用之前所学知识 导入json模块 涉及到中文ensure_ascii=False
def index(request):
    dict_user = {'name': 'curry老弟', 'age': 18}
    json_str = json.dumps(dict_user,ensure_ascii=False)
    return HttpResponse(json_str)

image

from django.http import JsonResponse
 return JsonResponse(dict_user, json_dumps_params={'ensure_ascii': False})
字典中有中文 为了使不编码 查看底层源码 手动添加返回值

image
image

	序列化非字典类型的数据还需要指定safe参数为False

image

3.form表单携带文件数据
    form表单需要具备的条件  (前端做的事情  修改在网页)
        1.method属性值必须是post
        2.enctype属性值必须是  multipart/form-data
 	 后端获取文件数据的操作
    	  request.FILES
4.FBV与CBV
	FBV:基于函数的视图
        def index(request):
            return HttpResponse()
        path('index/', views.index)
 	CBV:基于类的视图
        from django import views
        class MyView(views.View):
            def get(self, request):
                return HttpResponse('我是CBV里面的get方法')
            def post(self, request):
                return HttpResponse('我是CBV里面的post方法')
         path('func/', views.MyView.as_view())
         """
         CBV会自动根据请求方式的不同匹配类中定义的方法并自动执行
         """
 
 5.CBV源码分析(重要)
 	源码分析入口
    	path('func/', views.MyView.as_view())
  	1.绑定给类的as_view方法
    	def as_view(...):
          def view(...):
              pass
          return view
 	2.CBV路由匹配本质:跟FBV是一致的
    	path('func/', views.view)
 	3.访问func触发view执行
    	def view(...):
          obj = cls()
          return obj.dispatch()
      '''涉及到对象点名字 一定要确定对象是谁 再确定查找顺序'''
  	4.研究dispatch方法
    	def dispatch(...):
          func_name = getattr(obj,request.method.lower())
          func_name(...)

模板层

1.模板语法传值
	方式1:指名道姓		指名道姓传参 不浪费资源 
   		return render(request, 'modal.html', {'name':name}) 
  	方式2:关键字locals()	  将整个局部名称空间中的名字去全部传入简单快捷
       return render(request,'modal.html',locals())

2.模板语法传值的范围
	基本数据类型直接传递使用
 	函数名的传递会自动加括号执行并将返回值展示到页面上
    	注意函数如果有参数则不会执行也不会展示 模板语法不支持有参函数
   类名的传递也会自动加括号产生对象并展示到页面上
   对象的传递则直接使用即可
   ps:模板语法会判断每一个名字是否可调用 如果可以则调用!!!
"""django的模板语法在操作容器类型的时候只允许使用句点符"""

3.模板语法过滤器(类似于python内置函数)
	 <p>统计长度:{{ s|length }}</p>
    <p>加法运算:{{ i|add:123 }}、加法运算:{{ s|add:'heiheihei' }}</p>
    <p>日期转换:{{ s|date:'Y-m-d H:i:s' }}</p>
    <p>文件大小:{{ file_size|filesizeformat }}</p>
    <p>数据切片:{{ l|slice:'0:10' }}</p>
    <p>字符截取(三个点算一个):{{ s1|truncatechars:6 }}</p>
    <p>单词截取(空格):{{ s1|truncatewords:6 }}</p>
    <p>语法转义:{{ script_tag|safe }}</p>
    <p>语法转义:{{ script_tag1|safe }}</p>
    from django.utils.safestring import mark_safe
    script_tag1 = '<script>alert(666)</script>'
    res = mark_safe(script_tag1)
    ps:有时候html页面上的数据不一定非要在html页面上编写了 也可以后端写好传入
'''django模板语法中的符号就两个 一个{{}} 一个{%%}
	需要使用数据的时候 {{}}
	需要使用方法的时候 {%%}
'''  

4.模板语法标签(类似于python流程控制)
	{% if 条件 %}  条件一般是模板语法传过来的数据  直接写名字使用即可
        条件成立执行的代码
    {% elif 条件1 %}
 		  条件1成立执行的代码	
    {% else %}
       	 条件都不成立执行的代码
    {% endif %}
    
    
    {% for i in s %}
        {% if forloop.first %}
            <p>这是第一次哟~</p>
        {% elif forloop.last %}
            <p>这是最后一次!</p>
        {% else %}
            <p>{{ i }}</p>
        {% endif %}
        {% empty %}
        	  <p>你给我的是个空 怎么for循环呢</p>
    {% endfor %}

5.自定义标签函数、过滤器、inclusion_tag
	"""
	如果想自定义 必须先做以下三件事
		1.在应用下创建一个名为templatetags文件夹
		2.在该文件夹创建任意名称的py文件
		3.在该py文件内编写自定义相关代码
			from django.template import Library
			register = Library()
	"""
    # 自定义过滤器
    @register.filter(name='myfilter')
    def my_add(a, b):
        return a + b
   	
    # 自定义标签函数
    @register.simple_tag(name='mt')
    def func(a, b, c, d):
        return a + b + c + d
   	
    # 自定义inclusion_tag
    @register.inclusion_tag(filename='it.html')
    def index(n):
        html = []
        for i in range(n):
            html.append('第%s页'%i)
        return locals()
   	
    {% load mytag %}
    {{ i|myfilter:1 }}
    {% mt 1 2 3 4 %}
    {% index 10 %}
    
6.模板的继承
	{% extends 'html文件名' %}
   	{% block 名字 %}
    	模板内容
	{% endblock %}
   	{% block 名字 %}
    	子板内容
    {% endblock %}
 	一般情况下母板中至少应该有三个区域使得扩展性更高!!!
    	css content js
    {% block css %}
	{% endblock %}
    {% block content %}
	{% endblock %}
    {% block js %}
	{% endblock %}
   	'''子板中还可以使用母板的内容  {{ block.super }} '''
  
7.模板的导入(了解)
	将html页面的某个部分当做模块的形式导入使用
    	{% include 'menu.html' %}

标签:return,框架,django,html,def,HttpResponse,模板,view
From: https://www.cnblogs.com/zzjjpp/p/16654321.html

相关文章

  • django4/网页伪静态/视图层/模板层
    网页伪静态动态页动态网页,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。静态页即静态网页,是实际存在的,无需经过服务器......
  • Stream流中使用的Fork/Join框架
            Fork/Join简单案例:使用Fork/join计算1-10000的和当一个任务的计算数量大于3000的时候拆分任务,数量小于3000的时候就计算packagecom.tuling.st......
  • 【2022-09-02】Django框架(四)
    Django框架(四)Django框架之伪静态概念静态文件:数据是写死,永远不会修改伪静态:将一个动态页面伪装成静态页面#为什么要伪装?伪装的目的在于增大本网站的seo查询力......
  • 计算机组成结构——总体框架
    计算机主要包括CPU、存储器、输入输出设备三大部分。CPU其中CPU内包括控制器和算数逻辑单元。控制器控制器做为计算机的核心,其主要包括PC即程序计数器、IR指令寄存器,C......
  • 为什么要在学习花哨的 JS 框架之前学习 Vanilla JavaScript?
    为什么要在学习花哨的JS框架之前学习VanillaJavaScript?这是DavidKopal的博客。在此博客中,您可以了解VanillaJS在您的职业生涯中的好处。他在博客中分享的文字......
  • Django 与 Vue 语法冲突问题完美解决方法
    Django与Vue语法冲突问题完美解决方法当我们在djangoweb框架中,使用vue的时候,会遇到语法冲突.因为vue使用{{}},而django也使用{{}},因此会冲突.......
  • 使用 Django 集成 vue 到一个服务器上,还是 Django 和 vue 分开部署
    Django+Vue的项目,实际部署的时候,使用Django集成vue到一个服务器上,还是Django和vue分开部署?目前在架构选择,基本上定了Django+Vue但是实际部署的时候,就有两种......
  • Django基础介绍二
    数据的查,改,删先讲数据库中的数据全部展示到前端然后给每一个数据两个按钮一个编辑一个删除查看defuserlist(request):#查询出用户表里面所有的数据#方式1#data......
  • Django CBV源码执行流程
         ......
  • SpringSecurity - 企业应用的安全框架
    参考资料1、官方网站:https://docs.spring.io/spring-security/reference/index.html认证(Authentication)用户认证:验证某个用户是否为系统中的合法主体,也就是说用户能否访......