ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Day78--阶段复习03--Django框架

2021-11-17 01:31:26  阅读:132  来源: 互联网

标签:__ 03 -- 标签 request Django filter objects Book


django回顾

1.web应用,http协议,web框架

# ip+端口号唯一确定一个应用
   web应用: 默认端口号是 http协议 >>> 80 
    
# web框架是什么

# http协议

# wsgi协议,wsgiref,uWSGI分别是什么?
    wsgi协议是py中的一个协议:规定了web服务器如何拆分和封装http协议(拆分请求和封装响应)
    Django框架,就是根据 请求拆分后的environ字典,再封装成请求对象request,方便处理;将返回数据封装成响应对象response交给遵守wsgi协议的服务器,又封装成start_respon 
    wsgiref,uWSGI是遵守wsgi协议的web服务器,不同是wsgiref性能低(开发测试常用),而uWSGI是用C语言实现的,性能高(上线常用)
    
# 模板文件是在什么时候完成渲染的?
    在后端渲染完,只要出了django框架,就是完整的html,css和js

2.django请求生命周期

1593655165215

3.路由控制

# django是一个同步框架 (就一个请求过来,必须等数据处理 I/O操作完才能完成;才执行下一个请求)

# 最新版本3.x (支持异步,但一旦开启异步,后续所有都得异步,pymysql(同步模块)就不能使用)  

# URL与要为该URL调用的视图函数之间的映射表

# 1.x 和2.x版本路由稍微不同
    1.x:url
    2.x:path,re_path(原来的url)
    
# 写法
from django.conf.urls import url
urlpatterns = [
     url(正则表达式, views视图函数,参数-字典形式,别名),
]

#  APPEND_SLASH  的用法 setting中设置是否自动url匹配加斜杠

# 有名分组 
re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
# 无名分组
re_path(r'^articles/([0-9]{4})/$', views.year_archive),

# 路由分发
path('app01/', include(urls)),  # app01中,自己创建一个urls.py 

# 反向解析
视图函数中
from django.shortcuts import reverse
url=reverse('test',args=(10,20))  # test是在url内配置的别名

在模板中使用
{% url "别名" 参数 参数 %}

# 名称空间(了解: 主要是防止路由分发时,各应用下名字相同产出冲突,导致反向解析出错,反向解析时带上 名称空间:别名)

# 2.x的path内置了几个转换器  re_path不支持
    # 可直接将匹配到url字符串,并转换成特定Python格式
    str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
    int,匹配正整数,包含0。
    slug,匹配字母、数字以及横杠、下划线组成的字符串。
    uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
    path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)

# 2.x的path自定义转换器(了解)

4.视图层

# response对象: 三件套+JsonResponse   本质都是HttpResonse
# request对象:
    request.GET:http://127.0.0.1:8000/index/123?name=lqz&age=18   name=lqz&age=18会被转成字典,放到GET中
    request.POST: urlencoded,formdata 两种编码的数据会被放在这个字典中
    request.META: HTTP请求的其他东西,放在这里面,如客户端ip地址:REMOTE_ADDR
    request.FILES: 上传的文件
    request.session: 用的session
        
        
# 301 和302的区别

# JsonResponse

# CBV和FBV

# 文件上传(form表单中指定编码方式)
def index(request):
    if request.method=='GET':
        return  render(request,'index.html')
    else:
        myfile=request.FILES.get('myfile')  #文件对象
        print(type(myfile))
        from django.core.files.uploadedfile import InMemoryUploadedFile
        name=myfile.name
        print(myfile.field_name)
        with open(name,'wb') as f:
            for line in myfile:
                f.write(line)
        return HttpResponse('文件上传成功')

5.模板层

模版语法重点:

  变量:{{ 变量名 }}

	1 深度查询 用句点符

	2 过滤器
        内置过滤器:
            {{obj|filter__name:param}}  变量名字|过滤器名称:变量
            
        重点:safe   
            Django的模板中会对HTML标签和JS等语法标签进行自动转义。 safe表示安全不转义
        原理:Django模板会将HTML中的标签,用html的特殊符号进行替换,这样进行了避免xss攻击。返回html的时候,浏览器会自动将特殊符号识别为标签,进行前端的显示。
        
        <a href="https://www.baidu.com">点我<a> 如果原封不动的显示在html中,一定是a标签,但在Django的模板中是html的特殊字符
        过滤器 safe 就是设置Django模板不转义,不用特殊符号替换,原生的html代码

        # 防止xss攻击 
        XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
    
    
  标签:{%  标签名 %}

    for标签
    if标签
    with标签
       
    # {% csrf_token%} 标签 
    {% csrf_token%}  标签 就是服务器给前端页面生成一个随机字符串,用input框 隐藏的 名字叫csrfmiddlewaretoken
    <input type="hidden" name="csrfmiddlewaretoken" value="sadfasdfasdf" >
	
    {{ csrf_token }} 注意和上面的区别,这只是模板语法中变量,指的是渲染完成后的值 sadfasdfasdf ,常用''括起来使用
	
# 模板的导入和继承
    include
    extend:先用{% block title %},画块
    再用{% extends "base.html" %} 
    {% block content %}
    自己的内容
    {% endblock %}

6.模型层

# 使用orm的步骤
    1 在setting中配置(连数据库的地址,端口)
    2 在 __init__中使用pymysql
    3 在models.py中写类,写属性
    4 使用:数据库迁移的两条命令
    	python3 manage.py makemigrations  #记录
        python3 manage.py migrate         # 真正的数据库同步
    5 在视图函数中使用orm
    	
 # orm的api
    <1> all():                  查询所有结果

    <2> filter(**kwargs):       它包含了与所给筛选条件相匹配的对象

    <3> get(**kwargs):          返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。

    <4> exclude(**kwargs):      它包含了与所给筛选条件不匹配的对象

    <5> order_by(*field):       对查询结果排序('-id')

    <6> reverse():              对查询结果反向排序

    <8> count():                返回数据库中匹配查询(QuerySet)的对象数量。

    <9> first():                返回第一条记录

    <10> last():                返回最后一条记录

    <11> exists():              如果QuerySet包含数据,就返回True,否则返回False

    <12> values(*field):        返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列
        
    <13> values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列

    <14> distinct():            从返回结果中剔除重复纪录
        
        
 # 下划线查询
    Book.objects.filter(price__in=[100,200,300])
    Book.objects.filter(price__gt=100)
    Book.objects.filter(price__lt=100)
    Book.objects.filter(price__gte=100)
    Book.objects.filter(price__lte=100)
    Book.objects.filter(price__range=[100,200])
    Book.objects.filter(title__contains="python")
    Book.objects.filter(title__icontains="python")
    Book.objects.filter(title__startswith="py")
    Book.objects.filter(pub_date__year=2012)
 # 删除
    对象.delete()   #删一条
    queryset对象.delete()  # 删多条
    
 # 更新
    Book.objects.filter(title__startswith="py").update(price=120)

7.断点调试

# 第一步:打断点 
    代码行号右边 鼠标左键点一下,有个红点,表示打了一个断点,如果断点调试,程序走到这卡主,除非你让他继续往下走,否则它会卡在这
    
# 第二步:以debug模式运行

# 第三步:单步调试:一步一步走
    # 快速跳到下一个断点:左侧的绿箭头
    # 跳到函数内部: step into 直箭头向下
    # 把函数运行当做一步:step over 跳箭头向右
    # 快速把所有断点都设置为灰色:左侧的红点带斜杆  (断点还在,但不拦截 卡住)
    # 快速删除所有断点:左侧的双圆红点-->再'-'减掉

作业:

1 链式调用(jq),用python实现链式调用(对象.hello.world.add())

2 关键字过滤的标签

3 常用(非常用)字段和参数,Django-model进阶(https://www.cnblogs.com/liuqingzheng/p/9506212.html)

标签:__,03,--,标签,request,Django,filter,objects,Book
来源: https://www.cnblogs.com/Edmondhui/p/15565333.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有