django回顾

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

# ip+端口号唯一确定一个应用
# web框架是什么
# http协议 # wsgi协议,wsgiref,uWSGI分别是什么?
wsgi协议是py中的一个协议:规定了如何拆,封http协议 #模板文件是在什么时候完成渲染的?
在后端渲染完,只要出了django框架,就是完整的html,css和js

2 django请求生命周期

3 路由控制

# django是一个同步框架
# 最新版本3.x
# 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 的用法
#
# 有名分组
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)), #反向解析
###视图函数中
from django.shortcuts import reverse
url=reverse('test',args=(10,20)) # test是在url内配置的别名
###在模板中使用
{% url "别名" 参数 参数%} # 名称空间(了解) #2.x的path内置了几个转换器
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 xss攻击
<a href="https://www.baidu.com">点我<a> 如果原封不动的显示在html中,一定是a标签,html的特殊字符 for标签
if标签
with标签 # {% csrf_token%}
{% csrf_token%}
{{ csrf_token }}
<input type="hidden"value="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)

作业:

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

2 关键字过滤的标签

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

线下---复习day03的更多相关文章

  1. 线下---复习day04---作业

    1 学的不好的同学:用ajax提交一个json格式数据,返回一个json格式数据,console.log打印出来 2 通过ajax上传一个文件并保存起来,前端接收到,弹窗说上传成功 urls.py f ...

  2. 线下---复习day04

    目录 1 Django与Ajax 2分页器组件 3 forms组件 4cookie与session组件 5中间件组件 6Auth模块 作业: 1 Django与Ajax # 通过ajax向https: ...

  3. 线下---复习day02

    目录 1 后续课程安排 2 作业讲解 3 python中的魔法方法 setattr,getattr,setitem,getitem演示 with 上下文管理器 eq 4 cookie,session, ...

  4. 线下---复习day01

    目录 1 个人介绍 2 关于编辑器 3 基础串讲 3.1 解释型和编译型 3.2 数据类型 3.2.1 一切皆对象 3.2.1 深浅copy 3.2.3 可变类型与不可变类型 3.3 字符编码 3.4 ...

  5. 这个立冬,我线下面基了一位TMD高级专家,太牛逼了!

    立冬刚过,迎面而来的是一股寒气.天气如此,市场亦是如此.昨天周五,和1个认识的技术专家老刘约饭,也算是线下面基,增进感情.每年我都要向比我高阶的朋友讨教.不由自主聊到了他的职场生涯.鱼哥一直以为自己命 ...

  6. YY一下微信线下支付的场景

    在上一篇文章里面提到了 <跨行清算的实现原理>,这次来分析一下线下支付的场景和流程. 今天看到一篇文章:http://www.huxiu.com/article/23248/1.html? ...

  7. ABP(现代ASP.NET样板开发框架)主题线下交流会(上海)开始报名了!

    点这里进入ABP系列文章总目录 ABP主题线下交流会(上海)开始报名了 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称.它是采用最佳实践和流行技术 ...

  8. 微信公众平台"微信连Wi-Fi"功能来了 线下微信增粉利器

    微信连Wi-Fi功能在第三方开发者和服务商已经有出现了,但有些成本相对会高些.近日微信公众平台新添了一个功能插件“微信连Wi-Fi”,已有微信认证过的公众号即可申请开通.赶紧去布局这个线下微信增粉利器 ...

  9. 从CR线下活动学到的:如何组织一个小的线下活动

    作者:朱克锋 邮箱:zhukefeng@iboxpay.com 转载请注明出处:http://blog.csdn.net/linux_zkf 周末在腾讯组织了GR,活动达到了预期的收获,从这次活动我主 ...

随机推荐

  1. Vue使用js鼠标蜘蛛特效

    1. 在src下新建文件夹utils,里面新建文件canvas-nest.js,将代码复制进去.(可以自己定义存放路径) !function() { function n(n, e, t) { ret ...

  2. 一篇文章教会你用Python抓取抖音app热点数据

    今天给大家分享一篇简单的安卓app数据分析及抓取方法.以抖音为例,我们想要抓取抖音的热点榜数据. 要知道,这个数据是没有网页版的,只能从手机端下手. 首先我们要安装charles抓包APP数据,它是一 ...

  3. 双剑合璧 Nacos 结合 Sentinel 实现流量安全控制

    Alibaba Sentinel 是一款高性能且轻量级的流量控制.熔断降级解决方案.是面向分布式服务架构的高可用流量控制组件. Sentinel 官网:https://sentinelguard.io ...

  4. workbench中如何导入.sql文件

    在做电商管理系统的时候,需要使用 mysql 中的数据,在执行 app.js 文件时出现错误 于是将 mydb.sql 导入到workbench中,步骤如下: 1. 打开 workbench 软件,选 ...

  5. v-else-if(v-show)

    <div id="app"> <div v-if="type === 'A'"> A </div> <div v-el ...

  6. Python多线程 - threading

    目录 1. GIL 2. API 3. 创建子线程 4. 线程同步 4.1. 有了GIL,是否还需要同步? 4.1.1. 死锁 4.1.2. 竞争条件 4.1.3. GIL去哪儿了 4.2. Lock ...

  7. [转] 间接系统调用syscall(SYS_gettid)

    点击阅读原文 在linux下每一个进程都一个进程id,类型pid_t,可以由 getpid()获取. POSIX线程也有线程id,类型pthread_t,可以由 pthread_self()获取,线程 ...

  8. (七)Maven Profile 和 Filtering

    每个项目都会有多套运行环境(开发,测试,正式等等),不同的环境配置也不尽相同(如jdbc.url),借助Jenkins和自动部署提供的便利,我们可以把不同环境的配置文件单独抽离出来,打完包后用对应环境 ...

  9. Selenium上传文件方法大全

    最好的方法:调js 其他方法: Python pywin32库,识别对话框句柄,进而操作 SendKeys库 autoIT,借助外力,我们去调用其生成的au3或exe文件. keybd_event,跟 ...

  10. Python基础002---基础知识

    一.标识符 标识符是自己定义的,是开发人员在程序中自己定义的一些符号和名称,如变量名.函数名等.在 Python 里,标识符由字母(区分大小写).数字.下划线组成,且数字不能开头.常用的命名方法有小驼 ...