Django
C-haidragon
我的视频学习地址:https://edu.csdn.net/lecturer/5805?spm=1003.2001.3001.4144
展开
-
布署
布署从uwsgi、nginx、静态文件三个方面处理服务器介绍服务器:私有服务器、公有服务器私有服务器:公司自己购买、自己维护,只布署自己的应用,可供公司内部或外网访问公有服务器:集成好运营环境,销售空间或主机,供其布署自己的应用私有服务器成本高,需要专业人员维护,适合大公司使用公有服务器适合初创公司使用,成本低常用的公有服务器,如阿里云、青云等,可根据需要,按流量收费或按时间收原创 2017-11-05 09:08:08 · 569 阅读 · 0 评论 -
csrf
csrf全称Cross Site Request Forgery,跨站请求伪造某些恶意网站上包含链接、表单按钮或者JavaScript,它们会利用登录过的用户在浏览器中的认证信息试图在你的网站上完成某些操作,这就是跨站攻击演示csrf如下创建视图csrf1用于展示表单,csrf2用于接收post请求def csrf1(request): return render(request,原创 2017-11-04 09:16:29 · 306 阅读 · 0 评论 -
HTML转义
HTML转义Django对字符串进行自动HTML转义,如在模板中输出如下值:视图代码:def index(request): return render(request, 'temtest/index2.html', { 't1': 'hello' })模板代原创 2017-11-04 09:12:24 · 541 阅读 · 0 评论 -
模板继承
模板继承模板继承可以减少页面内容的重复定义,实现页面内容的重用典型应用:网站的头部、尾部是一样的,这些内容可以定义在父模板中,子模板不需要重复定义block标签:在父模板中预留区域,在子模板中填充extends继承:继承,写在模板文件的第一行定义父模板base.html{ %block block_name%}这里可以定义默认值如果不定义默认值,则表示空字符串{ %endblock%原创 2017-11-04 09:07:48 · 530 阅读 · 0 评论 -
定义模板
定义模板模板语言包括变量标签 { % 代码块 % }过滤器注释{# 代码或html #}变量语法:{{ variable }}当模版引擎遇到一个变量,将计算这个变量,然后将结果输出变量名必须由字母、数字、下划线(不能以下划线开头)和点组成当模版引擎遇到点("."),会按照下列顺序查询:字典查询,例如:foo["bar"]属性或方法查询,例如:f原创 2017-11-04 09:03:47 · 446 阅读 · 0 评论 -
模板介绍
模板介绍作为Web框架,Django提供了模板,可以很便利的动态生成HTML模版系统致力于表达外观,而不是程序逻辑模板的设计实现了业务逻辑(view)与显示内容(template)的分离,一个视图可以使用任意一个模板,一个模板可以供多个视图使用模板包含HTML的静态部分动态插入内容部分Django模板语言,简写DTL,定义在django.template包中由startproj原创 2017-11-04 09:00:45 · 341 阅读 · 0 评论 -
ORM简介
ORM简介MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库ORM是“对象-关系-映射”的简称,主要任务是:根据对象的类型生成表结构将对象、列表的操作,转换为sql语句将sql查询到的结果转换为对象、列表这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动Dj原创 2017-11-03 09:27:38 · 325 阅读 · 0 评论 -
状态保持
状态保持http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态客户端与服务器端的一次通信,就是一次会话实现状态保持的方式:在客户端或服务器端存储与会话有关的数据存储方式包括cookie、session,会话一般指session对象使用cookie,所有数据存储在客户端,注意不要存储敏感信息推荐使用sesison方式,所有数据存储在服务器端,在客户端cookie中存储ses原创 2017-11-03 09:23:42 · 301 阅读 · 0 评论 -
HttpResponse对象
HttpResponse对象在django.http模块中定义了HttpResponse对象的APIHttpRequest对象由Django自动创建,HttpResponse对象由程序员创建不调用模板,直接返回数据#coding=utf-8from django.http import HttpResponsedef index(request): return HttpRe原创 2017-11-03 09:19:16 · 25692 阅读 · 0 评论 -
POST属性
POST属性QueryDict类型的对象包含post请求方式的所有参数与form表单中的控件对应问:表单中哪些控件会被提交?答:控件要有name属性,则name属性的值为键,value属性的值为键,构成键值对提交对于checkbox控件,name属性一样为一组,当控件被选中后会被提交,存在一键多值的情况键是开发人员定下来的,值是可变的示例如下定义视图postTest1def原创 2017-11-03 09:12:11 · 1041 阅读 · 0 评论 -
验证码
验证码在用户注册、登录页面,为了防止暴力请求,可以加入验证码功能,如果验证码错误,则不需要继续处理,可以减轻一些服务器的压力使用验证码也是一种有效的防止crsf的方法验证码效果如下图:验证码视图新建viewsUtil.py,定义函数verifycode此段代码用到了PIL中的Image、ImageDraw、ImageFont模块,需要先安装Pillow(3.4.1)包,详细原创 2017-11-04 09:20:25 · 295 阅读 · 0 评论 -
管理静态文件
管理静态文件项目中的CSS、图片、js都是静态文件配置静态文件在settings 文件中定义静态内容STATIC_URL = '/static/'STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'),]在项目根目录下创建static目录,再创建当前应用名称的目录mysite/static/myapp/原创 2017-11-04 09:24:11 · 293 阅读 · 0 评论 -
celery
celery官方网站中文文档示例一:用户发起request,并等待response返回。在本些views中,可能需要执行一段耗时的程序,那么用户就会等待很长时间,造成不好的用户体验示例二:网站每小时需要同步一次天气预报信息,但是http是请求触发的,难道要一小时请求一次吗?使用celery后,情况就不一样了示例一的解决:将耗时的程序放到celery中执行示例二的解决:使用celery定时执原创 2017-11-05 09:05:54 · 364 阅读 · 0 评论 -
全文检索
全文检索全文检索不同于特定字段的模糊查询,使用全文检索的效率更高,并且能够对于中文进行分词处理haystack:django的一个包,可以方便地对model里面的内容进行索引、搜索,设计为支持whoosh,solr,Xapian,Elasticsearc四种全文检索引擎后端,属于一种全文检索的框架whoosh:纯Python编写的全文搜索引擎,虽然性能比不上sphinx、xapian、El原创 2017-11-05 09:02:35 · 464 阅读 · 0 评论 -
缓存
缓存对于中等流量的网站来说,尽可能地减少开销是必要的。缓存数据就是为了保存那些需要很多计算资源的结果,这样的话就不必在下次重复消耗计算资源Django自带了一个健壮的缓存系统来保存动态页面,避免对于每次请求都重新计算Django提供了不同级别的缓存粒度:可以缓存特定视图的输出、可以仅仅缓存那些很难生产出来的部分、或者可以缓存整个网站设置缓存通过设置决定把数据缓存在哪里,是数据库原创 2017-11-05 09:00:58 · 409 阅读 · 0 评论 -
富文本编辑器
富文本编辑器借助富文本编辑器,管理员能够编辑出来一个包含html的页面,从而页面的显示效果,可以由管理员定义,而不用完全依赖于前期开发人员此处以tinymce为例,其它富文本编辑器的使用可以自行学习使用编辑器的显示效果为:下载安装在网站pypi网站搜索并下载"django-tinymce-2.4.0"解压tar zxvf django-tinymce-2.4.0.tar.g原创 2017-11-05 08:56:50 · 488 阅读 · 0 评论 -
使用Ajax
使用Ajax使用视图通过上下文向模板中传递数据,需要先加载完成模板的静态页面,再执行模型代码,生成最张的html,返回给浏览器,这个过程将页面与数据集成到了一起,扩展性差改进方案:通过ajax的方式获取数据,通过dom操作将数据呈现到界面上推荐使用框架的ajax相关方法,不要使用XMLHttpRequest对象,因为操作麻烦且不容易查错jquery框架中提供了$.ajax、$.get、$.原创 2017-11-05 08:52:10 · 951 阅读 · 0 评论 -
分页
分页Django提供了一些类实现管理数据分页,这些类位于django/core/paginator.py中Paginator对象Paginator(列表,int):返回分页对象,参数为列表数据,每面数据的条数属性count:对象总数num_pages:页面总数page_range:页码列表,从1开始,例如[1, 2, 3, 4]方法page(num):下原创 2017-11-05 08:50:41 · 318 阅读 · 0 评论 -
管理站点
Admin站点通过使用startproject创建的项目模版中,默认Admin被启用1.创建管理员的用户名和密码python manage.py createsuperuser然后按提示填写用户名、邮箱、密码2.在应用内admin.py文件完成注册,就可以在后台管理中维护模型的数据from django.contrib import adminfrom models原创 2017-11-04 09:28:33 · 1573 阅读 · 0 评论 -
上传图片
上传图片当Django的在处理文件上传的时候,文件数据被保存在request.FILESFILES中的每个键为中的名字注意:FILES只有在请求的方法为POST并提交的带有enctype =“multipart / form-data”的情况下才会包含数据。否则,FILES将为一个空的类似于字典的对象使用模型处理上传文件:将属性定义成models.ImageField类型pic=model原创 2017-11-04 09:26:22 · 307 阅读 · 0 评论 -
中间件
中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出激活:添加到Django配置文件中的MIDDLEWARE_CLASSES元组中每个中间件组件是一个独立的Python类,可以定义下面方法中的一个或多个_init _:无需任何参数,服务器响应第一个请求的时候调用一次,用于确定是否启用当前中间件process_request(re原创 2017-11-04 09:25:17 · 287 阅读 · 0 评论 -
GET属性
GET属性QueryDict类型的对象包含get请求方式的所有参数与url请求地址中的参数对应,位于?后面参数的格式是键值对,如key1=value1多个参数之间,使用&连接,如key1=value1&key2=value2键是开发人员定下来的,值是可变的示例如下创建视图getTest1用于定义链接,getTest2用于接收一键一值,getTest3用于接收一键多值def getTest1原创 2017-11-03 09:09:35 · 649 阅读 · 0 评论 -
QueryDict对象
QueryDict对象定义在django.http.QueryDictrequest对象的属性GET、POST都是QueryDict类型的对象与python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况方法get():根据键获取值只能获取键的一个值如果一个键同时拥有多个值,获取最后一个值dict.get('键',default)或简写为dict['键']原创 2017-11-03 09:08:07 · 2558 阅读 · 0 评论 -
创建虚拟环境
创建虚拟环境创建:mkvirtualenv [虚拟环境名称]删除:rmvirtualenv [虚拟环境名称]进入:workon [虚拟环境名称]退出:deactivate所有的虚拟环境,都位于/home/.virtualenvs目录下进入虚拟环境前的提示:进入虚拟环境后的提示:查看当前的所有虚拟环境:workon [两次tab键]查看虚拟环境中已经安装的包p原创 2017-11-02 09:38:43 · 783 阅读 · 0 评论 -
学习django
MVC大部分开发语言中都有MVC框架MVC框架的核心思想是:解耦降低各功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现代码的重用m表示model,主要用于对数据库层的封装v表示view,用于向用户展示结果c表示controller,是核心,用于处理请求、获取数据、返回结果MVTDjango是一款python的web开发框架与MVC有所不同,属于MVT框架m表示mo原创 2017-11-02 09:37:54 · 347 阅读 · 0 评论 -
网络动态服务器-2-传递数据给应用
#coding=utf-8import socketimport sysfrom multiprocessing import Processimport reclass WSGIServer(object): addressFamily = socket.AF_INET socketType = socket.SOCK_STREAM requestQueue原创 2017-10-24 12:43:11 · 255 阅读 · 0 评论 -
应用程序示例
import timedef app(environ, start_response): status = '200 OK' response_headers = [('Content-Type', 'text/plain')] start_response(status, response_headers) return [str(environ)+'==He原创 2017-10-24 12:42:25 · 274 阅读 · 0 评论 -
网络动态服务器-1
#coding=utf-8import socketimport sysfrom multiprocessing import Processimport reclass WSGIServer(object): addressFamily = socket.AF_INET socketType = socket.SOCK_STREAM requestQueue原创 2017-10-24 12:40:59 · 425 阅读 · 0 评论 -
网页静态服务器-3-使用类
#coding=utf-8import socketimport sysfrom multiprocessing import Processimport reclass WSGIServer(object): addressFamily = socket.AF_INET socketType = socket.SOCK_STREAM requestQueue原创 2017-10-24 12:19:08 · 244 阅读 · 0 评论 -
服务器动态资源请求
1. 浏览器请求动态页面过程2. WSGI怎么在你刚建立的Web服务器上运行一个Django应用和Flask应用,如何不做任何改变而适应不同的web架构呢?在以前,选择 Python web 架构会受制于可用的web服务器,反之亦然。如果架构和服务器可以协同工作,那就好了:但有可能面对(或者曾有过)下面的问题,当要把一个服务器和一个架构结合起来时,却发现他们不是被设原创 2017-10-24 12:20:45 · 3025 阅读 · 0 评论 -
网页静态服务器-2显示需要的页面
#coding=utf-8import socketfrom multiprocessing import Processimport redef handleClient(clientSocket): '用一个新的进程,为一个客户端进行服务' recvData = clientSocket.recv(2014) requestHeaderLines = rec原创 2017-10-23 18:49:42 · 225 阅读 · 0 评论 -
网页静态服务器-1-显示固定的页面
#coding=utf-8import socketfrom multiprocessing import Processdef handleClient(clientSocket): '用一个新的进程,为一个客户端进行服务' recvData = clientSocket.recv(2014) requestHeaderLines = recvData.spli原创 2017-10-23 18:48:00 · 259 阅读 · 0 评论 -
设计介绍
设计介绍本示例完成“图书-英雄”信息的维护,需要存储两种数据:图书、英雄图书表结构设计:表名:BookInfo图书名称:btitle图书发布时间:bpub_date英雄表结构设计:表名:HeroInfo英雄姓名:hname英雄性别:hgender英雄简介:hcontent所属图书:hbook图书-英雄的关系为一对多数据库配置在settings.py文件中原创 2017-11-02 09:41:44 · 368 阅读 · 0 评论 -
管理站点
服务器运行如下命令可以开启服务器python manage.py runserver ip:port可以不写ip,默认端口为8000这是一个纯python编写的轻量级web服务器,仅在开发阶段使用服务器成功启动后,提示如下信息默认端口是8000,可以修改端口python manage.py runserver 8080打开浏览器,输入网址“127.0原创 2017-11-02 09:48:25 · 1768 阅读 · 0 评论 -
HttpReqeust对象
HttpReqeust对象服务器接收到http协议的请求后,会根据报文创建HttpRequest对象视图函数的第一个参数是HttpRequest对象在django.http模块中定义了HttpRequest对象的API属性下面除非特别说明,属性都是只读的path:一个字符串,表示请求的页面的完整路径,不包含域名method:一个字符串,表示请求使用的HTTP方法,常用值包括:'原创 2017-11-03 09:07:22 · 455 阅读 · 0 评论 -
视图函数
定义视图本质就是一个函数视图的参数一个HttpRequest实例通过正则表达式组获取的位置参数通过正则表达式组获得的关键字参数在应用目录下默认有views.py文件,一般视图都定义在这个文件中如果处理功能过多,可以将函数定义到不同的py文件中新建views1.py#coding:utf-8from django.http import HttpResponsedef原创 2017-11-03 09:05:30 · 2372 阅读 · 0 评论 -
视图与URLconf
视图视图接受Web请求并且返回Web响应视图就是一个python函数,被定义在views.py中响应可以是一张网页的HTML内容,一个重定向,一个404错误等等响应处理过程如下图:URLconf在settings.py文件中通过ROOT_URLCONF指定根级url的配置urlpatterns是一个url()实例的列表一个url()对象包括:正则表达式视图函数名称n原创 2017-11-03 09:02:26 · 365 阅读 · 0 评论 -
自连接
自连接对于地区信息,属于一对多关系,使用一张表,存储所有的信息类似的表结构还应用于分类信息,可以实现无限级分类新建模型AreaInfo,生成迁移class AreaInfo(models.Model): atitle = models.CharField(max_length=20) aParent = models.ForeignKey('self', null=True原创 2017-11-03 08:59:42 · 282 阅读 · 0 评论 -
模型查询
简介查询集表示从数据库中获取的对象集合查询集可以含有零个、一个或多个过滤器过滤器基于所给的参数限制查询的结果从Sql的角度,查询集和select语句等价,过滤器像where和limit子句接下来主要讨论如下知识点查询集字段查询:比较运算符,F对象,Q对象查询集在管理器上调用过滤器方法会返回查询集查询集经过过滤器筛选后返回新的查询集,因此可以写成链式过滤惰性执行:创建原创 2017-11-02 10:07:18 · 253 阅读 · 0 评论 -
模型成员
类的属性objects:是Manager类型的对象,用于与数据库进行交互当定义模型类时没有指定管理器,则Django会为模型类提供一个名为objects的管理器支持明确指定模型类的管理器class BookInfo(models.Model): ... books = models.Manager()当为模型类指定管理器后,django不再为模型类生成名为obj原创 2017-11-02 10:05:13 · 354 阅读 · 0 评论