一、回顾总结

https://www.cnblogs.com/maple-shaw/articles/9323320.html

1. 视图
1. CBV 和 FBV
from django.views import View class AddPublisher(View): def dispatch(self, request, *args, **kwargs): ret = super().dispatch(request, *args, **kwargs) return ret def get(self,request):
pass def post(self,request):
pass
使用:
url(r'^add_publisher/', views.AddPublisher.as_view()), 2. CBV的简单的流程
1. AddPublisher.as_view()得到一个view函数
url(r'^add_publisher/', view),
2. 请求到来的时候 执行view:
1. 实例化AddPublisher的类,赋值给self
2. 执行dispatch方法
3. 通过反射获取到get或者post的方法
4. 执行get或者post方法,返回HttpResponse对象
3. 装饰器的使用
1. FBV 正常使用
@装饰器 2. CBV
from django.utils.decorators import method_decorator 1. 给get或者post方法加
2. 给dispatch方法加
3. 给类加(写name='get')
4. request
request.method 请求方法 GET POST
request.GET URL传参 {}
request.POST form表单传的参数
request.body 请求体
request.FILES 上传的文件
request.path_info URL路径 不包含域名和URL参数 request.get_full_path() URL路径包含URL参数
request.get_host() 获取IP和端口
5. response 1. HttpResponse('字符串') —》 页面看到的就是字符串 content—type: text/html;charset=utf8
2. render(request,'HTML文件名',{参数}) ——》返回一个页面
3. redirect('/index/') 跳转 重定向 返回一个响应头 Location:'/index/'
4. JsonResponse(字典) content—type: application/json
返回列表时 safe=False
JsonResponse(data,safe=False) 2. 路由
1.
from django.conf.urls import url urlpatterns =[
url(正则表达式,视图,参数,name)
url(正则表达式,视图,参数,name)
url(正则表达式,视图,参数,name)
]
2. 正则表达式
加$
[0-9] /d
+ 一个或多个
?0个或1个
* 0个或多个
. 除了换行符的所有 3. 分组和命名分组 url(r'book/[0-9]{4}/[0-9]{2}/',views.book) 无名分组:
url(r'book/([0-9]{4})/([0-9]{2})/',views.book)
按照位置传参的方式传给视图 命名分组
url(r'book/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/',views.book)
按照关键字传参的方式给视图 捕获到的参数都是字符串 4. 命名url和url的反向解析 url(r'home',view,home,name='home')
url(r'book/([0-9]{4})/([0-9]{2})/',views.book,name='book')
url(r'book/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/',views.book,name='book2') 视图中反向解析URL:
from django.shortcuts import reverse reverse('home') ——》 /home/
reverse('book',args=('','')) ——》/book/1999/08/
reverse('book2',kwargs={'year':'','month':''}) ——》 /book/1998/08/ 模板中反向解析URL:
{% url 'home' %} ——》 /home/
无名分组: {% url 'book' '' '' %} ——》/book/1999/08/ 有名分组:
{% url 'book' '' '' %} ——》/book/1999/08/
{% url 'book' year='' month='' %} ——》/book/1999/08/
{% url 'book' month='' year='' %} ——》/book/1999/08/ 5. include
from app01 import urls as app01_urls
from app02 import urls as app02_urls url('app01/', include(app01_urls)),
url('app02/', include(app02_urls)) url('app01/', include('app01.urls')),
url('app02/', include('app02.urls')) 5. namespace 3. ORM
1. mysql的配置
1. 创建mysql数据库
2. settings配置
ENGINE: 'mysql'
NAME: '数据库名称'
HOST:IP
PORT: 3306
USER: 'root'
PASSWORD: '' 3. 告诉django使用pymysql来连接mysql数据库
在项目同名的文件夹下的__init__.py中写:
import pymysql
pymysql.install_as_MySQLdb() 4. 创建model
class Person(models.Model)
name = models.CharField(max_length=32) 5. 执行两条数据库命令
python manage.py makemigrations # 记录models的变更记录
python manage.py migrate # 把变革记录更新到数据库中 2. ORM操作 1. 查
models.Person.objects.all() # 查所有
models.Person.objects.get(id=1,name='xxx') # 查一个对象 满足条件的
models.Person.objects.filter(id=1,name='xxx') # 查询满足条件的所有对象 列表
models.Person.objects.filter(id=1,name='xxx').order_by('id') 属性:
pub_obj.name 外键的 book
book_obj.name
book_obj.publisher ——》 这是书籍关联的出版社对象
book_obj.publisher_id ——》 这是数据库存的数据
book_obj.publisher.id
book_obj.publisher.name 多对多 author author.name author.books ——》 多对多的管理对象
author.books.all() 所有作者关联的书籍对象列表 2. 增加:
models.Publisher.objects.creatte(name='xxxx') 外键
models.Book.objects.creatte(name='xxxx',publisher=pub_obj)
models.Book.objects.creatte(name='xxxx',publisher_id=pub_obj.id) 多对多 author_obj = models.Author.objects.creatte(name='xxx')
author_obj.books.set([1,2,3]) 3. 删除
models.Publisher.objects.get(id=1).delete()
models.Publisher.objects.filter(id=1).delete 4. 修改 pub_obj.name = new_name
pub_obj.save() book_obj.name= new_name
book_obj.publisher = new_pub_obj
book_obj.publisher_id = 2
book_obj.save() author_obj.name=new_name
author_obj.save()
author_obj.books.set([1,2])

回顾总结

二、预习和拓展

1.上台阶问题

    

    

def  f(n):
if n ==1:
return 1
elif n==2:
return 2
elif n ==3:
return 4
return f(n-1) + f(n-2) + f(n-3)

上台阶代码实现

2. 自定义固定长度char字段

 

class MyCharField(models.Field):
def __init__(self,max_length,*args,**kwargs):
self.max_length = max_length
super(MyCharField,self).__init__(max_length,*args,**kwargs) def db_type(self,connection):
return "char(%s)" % self.max_length

MyCharField

  cname = MyCharField(max_length=25)

2.ORM查!

python全栈开发day67--字段类型、字段属性、ORM回顾的更多相关文章

  1. python 全栈开发,Day54(jQuery的属性操作,使用jQuery操作input的value值,jQuery的文档操作)

    昨日内容回顾 jQuery 宗旨:write less do more 就是js的库,它是javascript的基础上封装的一个框架 在前端中,一个js文件就是一个模块 一.用法: 1.引入包 2.入 ...

  2. python 全栈开发,Day99(作业讲解,DRF版本,DRF分页,DRF序列化进阶)

    昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...

  3. Python全栈开发【面向对象进阶】

    Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...

  4. Python全栈开发【面向对象】

    Python全栈开发[面向对象] 本节内容: 三大编程范式 面向对象设计与面向对象编程 类和对象 静态属性.类方法.静态方法 类组合 继承 多态 封装 三大编程范式 三大编程范式: 1.面向过程编程 ...

  5. Python全栈开发【模块】

    Python全栈开发[模块] 本节内容: 模块介绍 time random os sys json & picle shelve XML hashlib ConfigParser loggin ...

  6. Python全栈开发【基础四】

    Python全栈开发[基础四] 本节内容: 匿名函数(lambda) 函数式编程(map,filter,reduce) 文件处理 迭代器 三元表达式 列表解析与生成器表达式 生成器 匿名函数 lamb ...

  7. Python全栈开发【基础三】

    Python全栈开发[基础三]  本节内容: 函数(全局与局部变量) 递归 内置函数 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 def 函数名(参数): ... 函数体 . ...

  8. Python全栈开发【基础二】

    Python全栈开发[基础二] 本节内容: Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典) 其他(编码,range,f ...

  9. python 全栈开发之路 day1

    python 全栈开发之路 day1   本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...

随机推荐

  1. C#winform 窗体缩放自适应

    1.  首先在窗体上放上一个Panel容器,并将容器的Dock属性设为Fill,即所有的控件都放在了这个容器里. using System; using System.Collections.Gene ...

  2. svn服务器的搭建备份和还原和svnmanager的使用

    svn服务器的搭建备份和还原和svnmanager的使用 一.svn服务端软件的安装和配置 1.安装svn版本库软件 # yum install -y subversion 2.建立svn版本库数据存 ...

  3. 缓存系列之四:redis持久化与redis主从复制

    一:redis 虽然是一个内存级别的缓存程序,即redis 是使用内存进行数据的缓存的,但是其可以将内存的数据按照一定的策略保存到硬盘上,从而实现数据持久保存的目的,redis支持两种不同方式的数据持 ...

  4. OpenStack实践系列⑤网络服务Neutron

    OpenStack实践系列⑤网络服务Neutron 3.8 Neturn 服务部署 注册neutron服务 [root@node1 ~]# source admin-openrc.sh [root@n ...

  5. [转]Navicat Premium 12试用期的破解方法

    link: https://blog.csdn.net/Jason_Julie/article/details/82864187 ref: https://www.jianshu.com/p/42a3 ...

  6. [C]控制外部变量访问权限的extern和static关键字

    一.extern 概述 编译器是由上至下编译源文件的,当遇到一些函数引用外部全局变量,而这个变量被定义在该函数声明主体的下方,又或者引用自其它的编译单元,这个情况就需要extern来向编译器表明此变量 ...

  7. 大数据python词频统计之hdfs分发-cacheArchive

    -cacheArchive也是从hdfs上进分发,但是分发文件是一个压缩包,压缩包内可能会包含多层目录多个文件 1.The_Man_of_Property.txt文件如下(将其上传至hdfs上) ha ...

  8. [原著]java或者Js 代码逻辑来处理 突破 oracle sql “IN”长度的极限的问题

    注:本文出自:博主自己研究验证可行   [原著]java或者Js  代码逻辑来处理  突破 oracle  sql "IN"长度的极限的问题    在很多的时候 使用 select ...

  9. 处理ftp服务器 在重启后ftp客户端不能连接访问的问题

    1:环境:centos7 2:当在重启centos7 linux服务器后,再连接ftp客户端不能链接 此时需要检查以下几点: 2-1:核查ftp服务是否启动正常: [root@localhost ~] ...

  10. Confluence 6 配置时间和日期格式

    你可以修改你 Confluence 为用户显示的时期和时间格式.设置的句法使用的是 SimpleDateFormat class,请参考 Java SimpleDateFormat 文档中的内容来设置 ...