首页 > 其他分享 >Django(五)

Django(五)

时间:2023-04-25 15:46:59浏览次数:28  
标签:get self request Django path method view

Django(五)

request对象

# GET POST FILES method
path path_info get_full_path() body

def index(request):
    print(request.path)  # /index/
    print(request.path_info)  # /index/
    print(request.get_full_path_info())  # 接收路径的全部内容连参数也能拿到
    print(request.body)  # 浏览器发过来的二进制数据
    return HttpResponse('OK')

CBV(class based view)和FBV(function based view)

# 之前写的都是FBV
# 也可以写CBV
在视图中写类

path('login/', views.MyLogin.as_view()),  # 在urls中写

# CBV必须继承View
class MyLogin(View):
    def get(self, request):  # 通过get请求方式会访问到这个方法
        return HttpResponse('get')

    def post(self, request):  # 通过post请求方式会访问到这个方法
        return HttpResponse('post')

CBV的源码剖析

# 看源码先找入口,入口在路由
path('login/', views.MyLogin.as_view()),

"""
    类来调用方法:
        1. 被@classmethod装饰器修饰的方法
        2. 被@staticmethod装饰器修饰的方法
    我们在MyLogin类中并没有写as_view(), 可能会在父类中

    views.MyLogin.as_view()-------------------->View类里面的as_view方法中得view方法的内存地址
"""

@classonlymethod  # 本质上就是@classmethod只是比他更强大

path('login/', views.MyLogin.as_view()), # 本质上放的还是函数的内存地址
path('index/', views.index),
# 当请求来了,会自定触发view函数的执行
def view(request, *args, **kwargs):
   self = cls(**initkwargs) #  # self = MyLogin(**initkwargs)
   return self.dispatch(request, *args, **kwargs)  # 执行完毕调用这个方法


def dispatch(self, request, *args, **kwargs):
    if request.method.lower() in self.http_method_names:  # 获取request的请求方式并转为小写,然后去往MyLogin的http_method_names里找
        handler = getattr(self, request.method.lower(), self.http_method_not_allowed)  # 反射,当request.method.lower()不存在的时候就返回http_method_not_allowed
    else:
        handler = self.http_method_not_allowed  # 没找到也返回值这个
        return handler(request, *args, **kwargs)  # 加上括号,直接调用这个方法
    
    
def http_method_not_allowed(self, request, *args, **kwargs):  # 主动抛出异常的方法
    logger.warning(
        'Method Not Allowed (%s): %s', request.method, request.path,
        extra={'status_code': 405, 'request': request}
    )
    return HttpResponseNotAllowed(self._allowed_methods())


http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']

# 权限 频率等的源码稍微复杂

'''源码时让你用来看的,不是让你用来改的,当你想要改源码的时候可以在自己写的继承了源码的类里面进行属性的重写'''
class MyLogin(View):
    http_method_names = ['get', 'post']  
    # 我写的这个类只允许get请求,怎么做?
    # 通过get请求方式会访问到这个方法
    def get(self, request):
        return HttpResponse('get')

    # 通过post请求方式会访问到这个方法
    def post(self, request):
        return HttpResponse('post')

模板层

{{ }}  跟变量相关的

{% %} 跟逻辑相关的

# 简单来说,模板层就是html文件,在html文件里面django给你提供了一些模板语法,是html自身不带的
# 模板变量的分配

'''模板里面取值一律使用点语法 .'''

# 在模板语法里面,函数的时候,不需要加括号,直接使用函数名,它会自动给你加括号调用。不可传参

模版之过滤器

django提供的过滤器:filter__name,我们需要学10个左右
# 语法
{{obj|filter__name:param}}  变量名字|过滤器名称:变量
from django.utils.safestring import mark_safe
s1 = mark_safe('<h1>hello</h1>')
{{ h|default:'nothing' }}
{{ c|length }}
{{ filesize|filesizeformat }}
{{ ctime|date:'Y-m-d' }}
{{ s|truncatechars:5 }}
{#{{ s1|safe }}#}
{#{{ s2|safe }}#}

{{ s1 }}

模版之标签

# 遍历字典
# 字典的三剑客
keys values items
forloop.counter            The current iteration of the loop (1-indexed) 当前循环的索引值(从1开始)
forloop.counter0           The current iteration of the loop (0-indexed) 当前循环的索引值(从0开始)
forloop.revcounter         The number of iterations from the end of the loop (1-indexed) 当前循环的倒序索引值(从1开始)
forloop.revcounter0        The number of iterations from the end of the loop (0-indexed) 当前循环的倒序索引值(从0开始)
forloop.first              True if this is the first time through the loop 当前循环是不是第一次循环(布尔值)
forloop.last               True if this is the last time through the loop 当前循环是不是最后一次循环(布尔值)
forloop.parentloop         本层循环的外层循环


if 标签

# {% if %}会对一个变量求值,如果它的值是True(存在、不为空、且不是boolean类型的false值),对应的内容块会输出。

{% if num > 100 or num < 0 %}
    <p>无效</p>
{% elif num > 80 and num < 100 %}
    <p>优秀</p>
{% else %}
    <p>凑活吧</p>
{% endif %}

# if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断。
csrf_token: {% csrf_token%}

模板的继承和导入

# 一个模板页面中应该至少有3块内容可以被替换
1. css
2. js
3. html
{% extends 'home.html' %}

{% block css %}
    <style>
        h1 {
            color: red;
        }
    </style>
{% endblock %}


{% block js %}
    <script>

    </script>
{% endblock %}

# 模板的导入
 {% include 'welcome.html' %}

标签:get,self,request,Django,path,method,view
From: https://www.cnblogs.com/juzixiong/p/17352796.html

相关文章

  • Django 如何使用 Celery 完成异步任务或定时任务
    以前版本的Celery需要一个单独的库(django-celery)才能与Django一起工作,但从Celery3.1开始,情况便不再如此,我们可以直接通过Celery库来完成在Django中的任务。安装Redis服务端以Docker安装为例,安装一个密码为mypassword的Redis服务端dockerrun-itd--name......
  • Python Django 制作商品列表展示
    新建名为goods应用pythonmanage.pystartappgoods修改chapter1/settings.py文件在INSTALLED_APPS数组中添加goods在对象TEMPLATES.OPTIONS中添加django.template.context_processors.media添加三个常量MEDIA_URL='/media/'MEDIA_ROOT=os.path.join(BASE......
  • Django 静态文件 request对象方法 pycharm和Django连接MySQL Django模型层初步了解 基
    目录静态文件一、概念静态文件:不经常变化的文件,主要针对html文件所使用到的各种资源。例如:css文件、js文件、img文件、第三方框架文件ps:Django针对静态文件资源需要单独在根目录创建一个static目录统一存放,该目录下的文件类型还有很多,例如:utils目录,plugins目录,li......
  • django中的主表和从表
    一、主表和从表在Django中,ORM的关系模型中,有主表和从表之分。其中,主表又称为“一方表”,从表也称为“多方表”。这里举个简单的例子:假设有两个模型 Blog 和 Entry,每个 Blog 包含多个 Entry:classBlog(models.Model):name=models.CharField(max_length=100)......
  • Django4全栈进阶之路16 template模板的基础模板
    <!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>{%blocktitle%}MySite{%endblock%}</title>{%blockstyles%}{%endblock%}</head><body><header><h1>MySite</h......
  • 加密Python项目代码之把Django或Flask项目打包成exe
    目录python代码仿泄露方案-方案一:启动起来,把源代码删除-方案二:pipinstaller打包成可执行文件-方案三:做到docker镜像中---》运行容器---》-epassword=授权码加密Python项目代码之把Django或Flask项目打包成exe:https://zhuanlan.zhihu.com/p/430490285......
  • Django4全栈进阶之路13 template模板
    在Django4中,模板是用于生成HTML响应的文件。模板将动态数据和静态HTML组合在一起,以便最终呈现给用户的页面。Django4中的模板使用Django模板语言(DjangoTemplateLanguage,简称DT)编写。DT与HTML类似,但包含一些特殊的标记和语法,用于动态地生成HTML内容。以下是一......
  • Django4全栈进阶之路11 view视图
    在Django4中,视图(View)是一个处理请求并返回响应的Python函数或类的组合。视图函数通常是处理请求的主要逻辑,因此它是DjangoWeb应用程序的重要组成部分。视图函数的基本结构如下:fromdjango.httpimportHttpResponsedefmy_view(request):#处理请求的代码r......
  • Django4全栈进阶之路9 url路由设置
    在Django4中,可以在主路由文件中设置和管理子路由。通常,我们会为每个应用程序创建一个子路由文件,以便更好地组织代码和管理路由。以下是Django4中设置主路由和子路由的示例:首先,在主路由文件urls.py中导入子路由,并将其添加到urlpatterns中:#urls.pyfromdjango.urls......
  • Django4全栈进阶之路8 STATIC静态文件路径设置、MEDIA媒体文件路径设置
     在Django4中,可以在settings.py文件中设置STATICFILES_DIRS来指定应用程序静态文件所在的文件夹路径,设置STATIC_ROOT来指定收集所有应用程序静态文件的目标文件夹路径。例如:#settings.pySTATICFILES_DIRS=[os.path.join(BASE_DIR,'static'),]STATIC_ROO......