
django笔记
django笔记
莺时拾叁
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
10 django 分页功能的实现
1 PaginatorPaginator 类的作用是将我们需要分页的数据分割成若干份。当我们实现化一个 Paginator 类的实例时,需要给 Paginator 传入两个参数。第一个参数是数据源,可以是一个列表、元组、以及查询结果集 QuerySet。第二个参数需要传入一个整数,表示每页显示数据条数。具体写法如下:book_list = []for x in range(1, 26): # 一共 25 本书 book_list.append('Book ' + str(x))# 将数据按原创 2020-08-11 17:24:40 · 209 阅读 · 0 评论 -
9.4 上传图片
上传图片Django有提供文件系统支持,在Admin站点中可以轻松上传图片。使用Admin站点保存图片,需要安装Python的图片操作包pip install Pillow1 配置默认情况下,Django会将上传的图片保存在本地服务器上,需要配置保存的路径。我们可以将上传的文件保存在静态文件目录中,如我们之前设置的static_files目录中在settings.py 文件中添加如下上传保存目录信息MEDIA_ROOT=os.path.join(BASE_DIR,"static_files/原创 2020-08-11 17:25:51 · 103 阅读 · 0 评论 -
9.3 调整编辑页展示
调整编辑页展示1. 显示字段属性如下:fields=[]1)点击某行ID的链接,可以转到修改页面,默认效果如下图:2)打开booktest/admin.py文件,修改BookInfoAdmin类如下:class BookInfoAdmin(admin.ModelAdmin): ... fields = ['btitle', 'bpub_date']3)刷新浏览器效果如下图:2. 分组显示属性如下:fieldsets=( ('组1标题',{'fields':原创 2020-08-11 17:25:58 · 108 阅读 · 0 评论 -
9.2 调整列表页展示
调整列表页展示调整列表页和编辑页必须先—定义与使用Admin管理类Django提供的Admin站点的展示效果可以通过自定义ModelAdmin类来进行控制。定义管理类需要继承自admin.ModelAdmin类,如下from django.contrib import adminclass BookInfoAdmin(admin.ModelAdmin): pass使用管理类有两种方式:注册参数admin.site.register(BookInfo,BookInfoAdmin原创 2020-08-11 17:26:20 · 212 阅读 · 0 评论 -
9.1 Admin站点
使用Admin站点假设我们要设计一个新闻网站,我们需要编写展示给用户的页面,网页上展示的新闻信息是从哪里来的呢?是从数据库中查找到新闻的信息,然后把它展示在页面上。但是我们的网站上的新闻每天都要更新,这就意味着对数据库的增、删、改、查操作,那么我们需要每天写sql语句操作数据库吗? 如果这样的话,是不是非常繁琐,所以我们可以设计一个页面,通过对这个页面的操作来实现对新闻数据库的增删改查操作。那么问题来了,老板说我们需要在建立一个新网站,是不是还要设计一个页面来实现对新网站数据库的增删改查操作,但是这样原创 2020-08-11 17:26:25 · 314 阅读 · 0 评论 -
8.8.4 关联查询
1 关联查询由一到多的访问语法:一对应的模型类对象.多对应的模型类名小写_set 例:b = BookInfo.objects.get(id=1)b.heroinfo_set.all()由多到一的访问语法:多对应的模型类对象.多对应的模型类中的关系类属性名 例:h = HeroInfo.objects.get(id=1)h.hbook访问一对应的模型类关联对象的id语法:多对应的模型类对象.关联类属性_id例:h = HeroInfo.objects.get(id=1)h.hb原创 2020-08-11 17:26:31 · 105 阅读 · 0 评论 -
8.8.3 聚合查询
1.聚合函数使用aggregate()过滤器调用聚合函数。聚合函数包括:Avg 平均,Count 数量,Max 最大,Min 最小,Sum 求和,被定义在django.db.models中。例:查询图书的总阅读量。from django.db.models import SumBookInfo.objects.aggregate(Sum('bread'))注意aggregate的返回值是一个字典类型,格式如下: {'属性名__聚合类小写':值} 如:{'bread__sum':3}原创 2020-08-11 17:26:37 · 117 阅读 · 0 评论 -
8.8.2 F对象和Q对象
F对象之前的查询都是对象的属性与常量值比较,两个属性怎么比较呢? 答:使用F对象,被定义在django.db.models中。语法如下:F(属性名)例:查询阅读量大于等于评论量的图书。from django.db.models import FBookInfo.objects.filter(bread__gte=F('bcomment'))可以在F对象上使用算数运算。例:查询阅读量大于2倍评论量的图书。BookInfo.objects.filter(bread__gt=F('bcom转载 2020-08-11 17:26:43 · 126 阅读 · 0 评论 -
8.8.1 过滤查询
过滤查询实现SQL中的where功能,包括filter 过滤出多个结果exclude 排除掉符合条件剩下的结果get 过滤单一结果对于过滤条件的使用,上述三个方法相同,故仅以filter进行讲解。过滤条件的表达语法如下:属性名称__比较运算符=值# 属性名称和比较运算符间使用两个下划线,所以属性名不能包括多个下划线1)相等exact:表示判等。例:查询编号为1的图书。BookInfo.objects.filter(id__exact=1)可简写为:BookInfo.obje原创 2020-08-11 17:26:58 · 270 阅读 · 0 评论 -
8.8 查询
查询1 基本查询get 查询单一结果,如果不存在会抛出模型类.DoesNotExist异常。all 查询多个结果。count 查询结果数量。>>> BookInfo.objects.all()<QuerySet [<BookInfo: 射雕英雄传>, <BookInfo: 天龙八部>, <BookInfo: 笑傲江湖>, <BookInfo: 雪山飞狐>, <BookInfo: 西游记>]>>>原创 2020-08-11 17:27:04 · 1057 阅读 · 0 评论 -
8.7 修改
3 修改修改更新有两种方法1)save修改模型类对象的属性,然后执行save()方法hero = HeroInfo.objects.get(hname='猪八戒')hero.hname = '猪悟能'hero.save()2)update使用模型类.objects.filter().update(),会返回受影响的行数HeroInfo.objects.filter(hname='沙悟净').update(hname='沙僧')...原创 2020-08-11 17:27:11 · 107 阅读 · 0 评论 -
8.6 删除
2 删除删除有两种方法1)模型类对象deletehero = HeroInfo.objects.get(id=13)hero.delete()2)模型类.objects.filter().delete()HeroInfo.objects.filter(id=14).delete()原创 2020-08-27 19:18:23 · 96 阅读 · 0 评论 -
8.5 数据库操作—增、删、改、查
数据库操作—增、删、改、查1 增加增加数据有两种方法。1)save通过创建模型类对象,执行对象的save()方法保存到数据库中。>>> from datetime import date>>> book = BookInfo( btitle='西游记', bput_date=date(1988,1,1), bread=10, bcomment=10)>>> book.save()>>>原创 2020-08-27 19:18:29 · 165 阅读 · 0 评论 -
8.4 演示工具使用
演示工具使用1 shell工具Django的manage工具提供了shell命令,帮助我们配置好当前工程的运行环境(如连接好数据库等),以便可以直接在终端中执行测试python语句。通过如下命令进入shellpython manage.py shell导入两个模型类,以便后续使用from booktest.models import BookInfo, HeroInfo2 查看MySQL数据库日志查看mysql数据库日志可以查看对数据库的操作记录。 mysql日志文件默认没有产生,需要原创 2020-08-27 19:18:49 · 96 阅读 · 0 评论 -
8.3 定义模型类
定义模型类模型类被定义在"应用/models.py"文件中。模型类必须继承自Model类,位于包django.db.models中。接下来首先以"图书-英雄"管理为例进行演示。1 定义创建应用booktest,在models.py 文件中定义模型类。from django.db import models#定义图书模型类BookInfoclass BookInfo(models.Model): btitle = models.CharField(max_length=20, v原创 2020-08-27 19:18:58 · 316 阅读 · 0 评论 -
8.2 配置
配置在settings.py中保存了数据库的连接配置信息,Django默认初始配置使用sqlite数据库。使用MySQL数据库首先需要安装驱动程序pip install PyMySQL在Django的工程同名子目录的__init__.py文件中添加如下语句from pymysql import install_as_MySQLdbinstall_as_MySQLdb()作用是让Django的ORM能以mysqldb的方式来调用PyMySQL。修改DATABASES配置信息原创 2020-08-27 19:19:06 · 113 阅读 · 0 评论 -
8.1 Django与数据库交互
数据库ORM框架O是object,也就类对象的意思,R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思,M是mapping,是映射的意思。在ORM框架中,它帮我们把类和数据表进行了一个映射,可以让我们通过类和类对象就能操作它所对应的表格中的数据。ORM框架还有一个功能,它可以根据我们设计的类自动帮我们生成数据库中的表格,省去了我们自己建表的过程。django中内嵌了ORM框架,不需要直接面向数据库编程,而是定义模型类,通过模型类和对象完成数据表的增删改查操作。使用django进行原创 2020-08-27 19:19:49 · 300 阅读 · 0 评论 -
7.5 CSRF攻击
CSRFCSRF全拼为Cross Site Request Forgery,译为跨站请求伪造。CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求。包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账…造成的问题:个人隐私泄露以及财产安全。CSRF攻击示意图客户端访问服务器时没有同服务器做安全验证防止 CSRF 攻击步骤在客户端向后端请求界面数据的时候,后端会往响应中的 cookie 中设置 csrf_token 的值在 Form原创 2020-08-27 19:19:56 · 95 阅读 · 0 评论 -
7.4 模板继承
模板继承模板继承和类的继承含义是一样的,主要是为了提高代码重用,减轻开发人员的工作量。父模板如果发现在多个模板中某些内容相同,那就应该把这段内容定义到父模板中。标签block:用于在父模板中预留区域,留给子模板填充差异性的内容,名字不能相同。 为了更好的可读性,建议给endblock标签写上名字,这个名字与对应的block名字相同。父模板中也可以使用上下文中传递过来的数据。{% block 名称 %}预留区域,可以编写默认内容,也可以没有默认内容{% endblock 名称 %}子模板原创 2020-08-27 19:20:03 · 138 阅读 · 0 评论 -
7.3 过滤器
过滤器语法如下:使用管道符号|来应用过滤器,用于进行计算、转换操作,可以使用在变量、标签中。如果过滤器需要参数,则使用冒号:传递参数。变量|过滤器:参数列举自带过滤器几个如下:safe,禁用转义,告诉模板这个变量是安全的,可以解释执行length,长度,返回字符串包含字符的个数,或列表、元组、字典的元素个数。default,默认值,如果变量不存在时则返回默认值。data|default:'默认值'date,日期,用于对日期类型的值进行字符串格式化,常用的格原创 2020-08-27 19:20:08 · 97 阅读 · 0 评论 -
7.2 模板语法
模板语法1 模板变量变量名必须由字母、数字、下划线(不能以下划线开头)和点组成。语法如下:{{变量}}模板变量可以使python的内建类型,也可以是对象。def index(request): context = { 'city': '北京', 'adict': { 'name': '西游记', 'author': '吴承恩' }, 'alist': [1, 2, 3, 4,原创 2020-08-27 19:20:13 · 225 阅读 · 0 评论 -
7.1 模板
模板Django自带模板使用1 配置在工程中创建模板目录templates。在settings.py配置文件中修改TEMPLATES配置项的DIRS值:TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], # 此处修改 'APP_DIRS': Tr原创 2020-08-27 19:20:48 · 97 阅读 · 0 评论 -
6.3 中间件
中间件Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性。我们可以使用中间件,在Django处理视图的不同阶段对输入或输出进行干预。1 中间件的定义方法定义一个中间件工厂函数,然后返回一个可以被调用的中间件。中间件工厂函数需要接收一个可以调用的get_response对象。返回的中间件也是一个可以被调用的对象,并且像视图一样需要接收一个requ原创 2020-08-27 19:20:53 · 142 阅读 · 0 评论 -
6.2 类视图使用装饰器
类视图使用装饰器为类视图添加装饰器,可以使用两种方法。为了理解方便,我们先来定义一个为函数视图准备的装饰器(在设计装饰器时基本都以函数视图作为考虑的被装饰对象),及一个要被装饰的类视图。def my_decorator(func): def wrapper(request, *args, **kwargs): print('自定义装饰器被调用了') print('请求路径%s' % request.path) return func(reques原创 2020-08-27 19:20:58 · 143 阅读 · 0 评论 -
6.1 定义类视图
定义类视图1 类视图引入以函数的方式定义的视图称为函数视图,函数视图便于理解。但是遇到一个视图对应的路径提供了多种不同HTTP请求方式的支持时,便需要在一个函数中编写不同的业务逻辑,代码可读性与复用性都不佳。 def register(request): """处理注册""" # 获取请求方法,判断是GET/POST请求 if request.method == 'GET': # 处理GET请求,返回注册页面 return render(req原创 2020-08-27 19:21:07 · 293 阅读 · 0 评论 -
5.4.2 Session操作
Session操作通过HttpRequest对象的session属性进行会话的读写操作。1) 以键值对的格式写session。request.session['键']=值2)根据键读取值。request.session.get('键',默认值)3)清除所有session,在存储中删除值部分。request.session.clear()4)清除session数据,在存储中删除session的整条数据。request.session.flush()5)删除session中的指定键及原创 2020-08-27 19:21:13 · 298 阅读 · 0 评论 -
5.4.1 Session配置和存储
Session配置和存储1 启用SessionDjango项目默认启用Session。可以在settings.py文件中查看如需禁用session,将settings.py中的session中间件注释掉即可。如下图:2 存储方式在settings.py文件中,可以设置session数据的存储方式,可以保存在数据库、本地缓存等。2.1 数据库存储在数据库中,如下设置可以写,也可以不写,这是默认存储方式。SESSION_ENGINE='django.contrib.sessions.bac原创 2020-08-27 19:21:18 · 283 阅读 · 0 评论 -
5.4 Session
SessionSession:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。Session 的原创 2020-08-27 19:21:23 · 73 阅读 · 0 评论 -
5.3 Cookie
CookieCookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。Cookie最早是网景公司的前雇员Lou Montulli在1993年3月的发明。Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器原创 2020-08-27 19:21:32 · 119 阅读 · 0 评论 -
5.2 响应Response
响应Response视图在接收请求并处理后,必须返回HttpResponse对象或子对象。HttpRequest对象由Django创建,HttpResponse对象由开发人员创建。1 HttpResponse可以使用django.http.HttpResponse来构造响应对象。HttpResponse(content=响应体, content_type=响应体数据类型, status=状态码)也可通过HttpResponse对象属性来设置响应体、状态码:content:表示返回的内容。s原创 2020-08-27 19:21:37 · 109 阅读 · 0 评论 -
5.1 请求与响应
请求与响应请求Request回想一下,利用HTTP协议向服务器传参有几种途径?提取URL的特定部分,如/weather/beijing/2018,可以在服务器端的路由中用正则表达式截取;查询字符串(query string),形如key1=value1&key2=value2;请求体(body)中发送的数据,比如表单数据、json、xml;在http报文的头(header)中。1 URL路径参数在定义路由URL时,可以使用正则表达式提取参数的方法从URL中获取请求参数,Djang原创 2020-08-27 19:21:43 · 106 阅读 · 0 评论 -
4.3 路由说明
路由说明1. 路由定义位置Django的主要路由信息定义在工程同名目录下的urls.py文件中,该文件是Django解析路由的入口。每个子应用为了保持相对独立,可以在各个子应用中定义属于自己的urls.py来保存该应用的路由。然后用主路由文件包含各应用的子路由数据。除了上述方式外,也可将工程的全部路由信息都定义在主路由文件中,子应用不再设置urls.py。如:from django.conf.urls import urlfrom django.contrib import adminimp原创 2020-08-27 19:21:47 · 141 阅读 · 0 评论 -
4.2 静态文件
静态文件项目中的CSS、图片、js都是静态文件。一般会将静态文件放到一个单独的目录中,以方便管理。在html页面中调用时,也需要指定静态文件的路径,Django中提供了一种解析的方式配置静态文件路径。静态文件可以放在项目根目录下,也可以放在应用的目录下,由于有些静态文件在项目中是通用的,所以推荐放在项目的根目录下,方便管理。为了提供静态文件,需要配置两个参数:STATICFILES_DIRS=[] 存放查找静态文件的目录 接收的是listSTATIC_URL 访问静态文件的URL前缀注意Dj原创 2020-08-27 19:22:00 · 106 阅读 · 0 评论 -
4.1 配置、静态文件与路由
配置、静态文件与路由配置文件1. BASE_DIR当前工程的根目录,Django会依此来定位工程内的相关文件,我们也可以使用该参数来构造文件路径。2. DEBUG调试模式,创建工程后初始值为True,即默认工作在调试模式下。作用:Django程序出现异常时,向前端显示详细的错误追踪信息,注意:部署线上运行的Django不要运行在调式模式下,记得修改DEBUG=False。3. 本地语言与时区初始化的工程默认语言和时区为英语和UTC标准时区LANGUAGE_CODE = 'en-us原创 2020-08-27 19:22:05 · 177 阅读 · 0 评论 -
3.7 创建视图
创建视图同Flask框架一样,Django也用视图来编写Web应用的业务逻辑。Django的视图是定义在子应用的views.py中的。1. 创建打开刚创建的users模块,在views.py中编写视图代码。from django.http import HttpResponsedef index(request): """ index视图 :param request: 包含了请求信息的请求对象 :return: 响应对象 """ return原创 2020-08-27 19:22:10 · 133 阅读 · 0 评论 -
3.6 创建子应用
创建子应用在Web应用中,通常有一些业务功能模块是在不同的项目中都可以复用的,故在开发中通常将工程项目拆分为不同的子功能模块,各功能模块间可以保持相对的独立,在其他工程项目中需要用到某个特定功能模块时,可以将该模块代码整体复制过去,达到复用。在Flask框架中也有类似子功能应用模块的概念,即蓝图Blueprint。Django的视图编写是放在子应用中的。1. 创建在django中,创建子应用模块目录仍然可以通过命令来操作,即:python manage.py startapp 子应用名称ma原创 2020-08-27 19:22:19 · 214 阅读 · 0 评论 -
3.5 VM virtualBox远程连接流程
VM virtualBox远程连接流程:第一步:第二步:第三步:第四步:第五步:原创 2020-08-27 19:22:24 · 321 阅读 · 0 评论 -
3.4 pycharm远程连接linux
pycharm远程连接linux第一步:第二步:第三步:第四步:第五步:第二种开始程序方式:原创 2020-08-27 19:22:29 · 117 阅读 · 0 评论 -
3.3 创建工程
创建工程在django中,项目工程目录可以借助django提供的命令帮助我们创建。1. 创建创建工程的命令为:django-admin startproject 工程名称例如:想要在桌面的code目录中创建一个名为demo的项目工程,可执行如下命令:cd ~/Desktop/codedjango-admin startproject demo执行后,会多出一个新目录名为demo,此即为新创建的工程目录。2. 工程目录说明查看创建的工程目录,结构如下与项目同名的目录,此处为dem原创 2020-08-27 19:22:33 · 134 阅读 · 0 评论 -
3.2 环境安装
环境安装1. 创建虚拟环境mkvirtualenv django_nb30 -p python3注意需要联网2. 安装Django使用django 1.11.11版本,注意需要联网pip install django==1.11.113. 复习虚拟环境和pip的命令# 虚拟环境mkvirtualenv # 创建虚拟环境rmvirtualenv # 删除虚拟环境workon # 进入虚拟环境、查看所有虚拟环境deactivate # 退出虚拟环境# pippip原创 2020-08-27 19:22:42 · 78 阅读 · 0 评论