1. 管理静态文件

  什么是静态文件?

    项目中的CSS、图片、js都是静态文件

配置静态文件(settings.py)

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/# 用于隐藏(伪装),配置更改(逻辑显示路径)
STATIC_URL = '/static/'
# 静态文件的存放路径(真实路径)
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),
]

创建static文件夹,在这个文件夹下创建应用名的文件夹(类似模板的创建)

配置数据库,为了不用迁移,还是用以前的

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'test2','USER':'root','PASSWORD':'','HOST':'localhost','POST':'3306',}
}

添加APP等操作就不提了 

views.py

from django.shortcuts import render# Create your views here.def index(request):return render(request,'booktest/index.html') 

根urls.py

from django.conf.urls import url,include
from django.contrib import adminurlpatterns = [url(r'^admin/', admin.site.urls),url(r'^', include('booktest.urls')),
]

app中urls.py

from django.conf.urls import url,include
from booktest import views
urlpatterns = [url(r'^$', views.index),
]

index.html

{# 加载模块#}
{% load static from staticfiles %}
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>index</title>
</head>
<body>
{#直接通过硬编码写死的路径进行调用#}
<img src="/static/booktest/a1.jpg" alt="图片1" height="300" width="500">
<br>
{#类似反向解析,不要使用硬编码写死,跟上面效果一致,改了static_url 这个会跟着变#}
<img src="{% static 'booktest/a1.jpg' %}" alt="图片1" height="300" width="500">
</body>
</html>

  效果

2. 中间键

  默认创建项目settings.py中的文件,可以自己配置

  作用:是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出

  激活:添加到Django配置文件中的MIDDLEWARE_CLASSES元组中

  面向切面编程Aspect Oriented Programming(AOP):针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。

  Django面向切面编程(类似,但也不全是)就是中间件

  请求request→中间件1→url→中间键2→view→中间键3→Template→中间键4→返回response

  Django本质:一个独立的python类,可以定义下面方法中的一个或多个

  • _init _:无需任何参数,服务器响应第一个请求的时候调用一次,用于确定是否启用当前中间件(只执行一次)
  • process_request(request):执行视图之前被调用,在每个请求上调用,返回None或HttpResponse对象(中间键1)
  • process_view(request, view_func, view_args, view_kwargs):调用视图之前被调用,在每个请求上调用,返回None或HttpResponse对象(中间件2)
  • process_template_response(request, response):在视图刚好执行完毕之后被调用,在每个请求上调用,返回实现了render方法的响应对象(中间键3)
  • process_response(request, response):所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象(中间键4)
  • process_exception(request,response,exception):当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象(中间键3改,出错不调用模板,直接返回的中间键,例404)

使用中间件,可以干扰整个处理过程,每次请求中都会执行中间件的这个方法

步骤

  步骤一:写好类的方法(上述五种)

  步骤二:将中间件注册在settings.py

演示:

  在APP中创建一个MyException.py文件

from django.http import HttpResponse
from django.utils.deprecation import MiddlewareMixinclass MyException(MiddlewareMixin):def process_exception(self, request, exception):# 出现异常,返回异常响应信息return HttpResponse(exception)

  

settings.py中注册

MIDDLEWARE = ['booktest.MyException.MyException','django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]

views.py(定义视图)

from django.http import HttpResponse
def myExp(request):# 故意定义错误a1 = int('abc')return HttpResponse('hello') 

urls.py

    url(r'^myexp$', views.myExp),

  效果

3 上传文件

  需要依赖pillow包

  • 当Django在处理文件上传的时候,文件数据被保存在request.FILES
  • FILES中的每个键为<input type="file" name="" />中的name
  • 注意:FILES只有在请求的方法为POST 且提交的<form>带有enctype="multipart/form-data" 的情况下才会包含数据。否则,FILES 将为一个空的类似于字典的对象

settings.py

# 上传图片的存储路径
MEDIA_ROOT=os.path.join(BASE_DIR,"static/media")

 

在static中创建目录media存储上传文件

views.py

from django.shortcuts import render
from django.http import HttpResponse
from django.conf import settings
import os
# Create your views here.# 上传文件界面
def uploadPic(request):return render(request, 'booktest/uploadPic.html')# 接受图片
def uploadHandle(request):if request.method == "POST":# 接收上传的图片pic1 = request.FILES['pic1']# 名字:绝对路径(图片存储路径)+项目名+文件名fname = os.path.join(settings.MEDIA_ROOT,pic1.name)with open(fname, 'wb') as pic:# 一点一点读for c in pic1.chunks():# 一点一点写pic.write(c)return HttpResponse("ok:%s<img src='/static/media/%s'>"%(fname,fname))else:return HttpResponse("error")

urls.py

    url(r'^uploadPic$', views.uploadPic),url(r'^uploadHandle$', views.uploadHandle),

uploadPic.html 

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>上传文件</title>
</head>
<body>
{#提交的另一个视图#}
<form action="/uploadHandle" method="post" enctype="multipart/form-data">{% csrf_token %}<input type="file" name="pic1"><br><hr><input type="submit" value="上传">
</form>
</body>
</html>

  效果

上传后

4 站点管理

  默认启动admin模块

  

 使用方法:

  步骤一:创建超级管理员

python manage.py createsuperuser

  账号:root

  邮箱:随便填

  密码:123root123

  步骤二:管理模型类

admin.py

from django.contrib import admin
from django.db import models
# Register your models here.
class UesrInfo(models.Model):uname = models.CharField(max_length=10)upwd = models.CharField(max_length=40)isDelete = models.BooleanField()

注:需要在models.py中把文件模型先写好,一起生成迁移文件,迁移,单独迁移会存在问题

生成迁移文件----生成模型类相关SQL语句

python manage.py makemigrations

 执行迁移----根据SQL语句生成相关表

python manage.py migrate

  

settings.py设置中文

LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'

  

注册admin.py

admin.site.register(BookInfo)

  效果

 admin.py(在前面入门的例子中有写)

from django.contrib import adminfrom django.db import modelsfrom .models import *
# 关联注册 (内部停靠),
# class HeroInfoline(admin.StackedInline):
# 表格效果
class HeroInfoline(admin.TabularInline):# 嵌入哪个类(一对多中,多的部分)model = HeroInfo# 增加一本图书的时候,还可以增加2个heroinfoextra = 2class BookInfoAdmin(admin.ModelAdmin):# 列表页显示# 列表list_display = ['id', 'btitle', 'bpub_date']# 过滤list_filter = ['btitle']# 搜索(支持模糊查询)search_fields = ['btitle']# 分页(每页显示多少条)list_per_page = 10# 添加页,修改页# 展示列表fields 和  fieldsets只能同时存在一个,功能一致# fields = ['bpub_date','btitle']# 分组fieldsets = [('base', {'fields': ['btitle']}),('super', {'fields': ['bpub_date']})]# 关联注册第二步,关联起来(一对多中,一的部分)inlines = [HeroInfoline]# admin.site.register(BookInfo)
# 注册
admin.site.register(BookInfo, BookInfoAdmin)
admin.site.register(HeroInfo)

  效果

可以使用装饰器注册(其实也一样)----只能在继承admin.ModelAdmin时使用装饰器

# admin.site.register(BookInfo, BookInfoAdmin)
@admin.register(BookInfo)
class BookInfoAdmin(admin.ModelAdmin):

5 分页

  • Django提供了一些类实现管理数据分页,这些类位于django/core/paginator.py中

Paginator对象

  • Paginator(列表,int):返回分页对象,参数为列表数据,每面数据的条数

属性

  • count:对象总数
  • num_pages:页面总数
  • page_range:页码列表,从1开始,例如[1, 2, 3, 4]

方法

  • page(num):下标以1开始,如果提供的页码不存在,抛出InvalidPage异常(无效页码)

异常exception

  • InvalidPage:当向page()传入一个无效的页码时抛出
  • PageNotAnInteger:当向page()传入一个不是整数的值时抛出
  • EmptyPage:当向page()提供一个有效值,但是那个页面上没有任何对象时抛出

Page对象

  • Paginator对象的page()方法返回Page对象,不需要手动构造

属性

  • object_list:当前页上所有对象的列表(当前页所有对象)
  • number:当前页的序号,从1开始
  • paginator:当前page对象相关的Paginator对象

方法

  • has_next():如果有下一页返回True
  • has_previous():如果有上一页返回True
  • has_other_pages():如果有上一页或下一页返回True
  • next_page_number():返回下一页的页码,如果下一页不存在,抛出InvalidPage异常
  • previous_page_number():返回上一页的页码,如果上一页不存在,抛出InvalidPage异常
  • len():返回当前页面对象的个数
  • 迭代页面对象:访问当前页面中的每个对象

转载于:https://www.cnblogs.com/shuimohei/p/10781126.html

Django 高级(其他知识点)相关推荐

  1. android 移除泛型中元素_最新(2020)Android高级面试知识点干货分享(二)

    最新Android高级面试知识点干货分享(一) *转载请说明出处*! 四.Java集合(List.Set.Queue.Map) Java集合体系是一个树状,如果按照类似OSI网络模型来看的话,整个Ja ...

  2. django高级应用(分页功能)

    django高级应用(分页功能) 1.原生分页应用 前端html代码 1 <!DOCTYPE html> 2 <html lang="en"> 3 < ...

  3. MySQL高级篇知识点——其它数据库日志

    目录 1.其他数据库日志 1.1.日志类型 1.2.日志的弊端 2.慢查询日志 (slow query log) 3.通用查询日志 (general query log) 3.1.问题场景 3.2.查 ...

  4. 高级计算机网络 知识点总结

    高级计算机网络知识点总结 一.引言 一.OSI七层模型 OSI定义了网络互连的七层框架(物理层.数据链路层.网络层.传输层.会话层.表示层.应用层),即ISO开放互连系统参考模型. 每一层实现各自的功 ...

  5. 华清远见—重庆中心——JAVA高级阶段知识点梳理

    华清远见-重庆中心--JAVA高级阶段知识点梳理 String字符串 String是一个类,属于数据类型中的引用类型.Java中所有使用""引起来的内容都是属于这个类的实例,称为字 ...

  6. (小白学JAVA之)Java高级特性知识点梳理

    Java高级特性知识点梳理 集合框架和泛型 List接口 ArrayList ArrayList类的常用方法 具体实现步骤 LinkedList LinkedList类的常用方法 具体实现步骤 Set ...

  7. MySQL高级篇知识点——索引优化与查询优化

    目录 1.数据准备 1.1.建库建表 1.2.创建相关函数 1.3.创建存储过程 1.4.调用存储过程 1.5.删除某表上的索引 2.索引失效案例 2.1.全值匹配 2.2.最佳左前缀匹配原则 2.3 ...

  8. django 高级扩展-中间件-上传图片-分页-富文本-celery

    """ django 高级扩展一.静态文件 1.css,js,json,图片,字体等 2.配置setting,在最底下设置静态文件目录,写入下面代码 #配置静态文件目录 ...

  9. ​一期一会直播预告|OpenCV认证课程:高级部分知识点系统化介绍与拓展 英特尔开发者套件:爱克斯板简介

    #时间 2023年6月1日 18:30(下周四) #主题 OpenCV认证课程:高级部分知识点系统化介绍与拓展 英特尔开发者套件:爱克斯板简介 #嘉宾 贾志刚 2004毕业于山东大学软件学院,软件工程 ...

  10. 计算机二级函数知识,2017年全国计算机二级考试MS Office高级应用知识点:INDIRECT函数...

    INDIRECT函数知识点 适用考试:全国计算机二级考试 考试科目:MS Office高级应用 科目知识点:INDIRECT函数 INDIRECT函数立即对引用进行计算,并显示其内容.当需要更改公式中 ...

最新文章

  1. python基础课程第12章,Python基础教程学习笔记 | 第12章 | 图形用户界面
  2. Windows Server 2008标准证书使用记录
  3. jsp内置对象与el内置对象
  4. Qt中 Qstring 与QbyteArray的互相转换
  5. Java Web之BaseServlet的抽取
  6. ipad和iphone切图_如何在iPhone,iPad和Mac上使消息静音
  7. 【Java】说明变量作用域的示例程序
  8. Dedecms会员中心注入漏洞
  9. The beginning iOS8 Programming with Swift 中文翻译 - 3
  10. 数控编程球面计算机,Mastercam9.1的数控编程
  11. 如何编译运行C语言代码
  12. 小爱同学app安卓版_小爱同学app2.0.1 安卓版 下载 - 51下载网
  13. Hutool excel 设置单元格格式为文本
  14. Android:检查通知权限并跳转到通知设置界面
  15. 视觉工程师出差过多必会出现的问题
  16. c#split方法拆分为数据_C# 根据分隔符拆分Excel单元格数据
  17. 高斯列主元消去法——C实现
  18. Linux 权限管理_sudo授权 学习总结(三)
  19. symbian模拟器的修正
  20. 如何用u盘安装深度linux系统,如何安装Deepin国产操作系统?只需一个U盘就够了,超简单...

热门文章

  1. 没事学学docker:在阿里云中部署MYSQL的容器+测试
  2. 黑色沙漠单机一键端服务器维护,《黑色沙漠》网游单机版一键服务端
  3. 二维数组及以上维度的数组,本质是一维数组?(C语言)
  4. 多模态简述(情感分析)
  5. NYOJ--975--关于521
  6. 从10秒到2秒!ElasticSearch性能调优实践
  7. Solidity陷阱:以太坊的随机数生成
  8. 区块链教程Fabric1.0源代码分析配置交易-生成通道配置
  9. mysql单表大小限制
  10. 武汉科技大学ACM:1006: 我是老大