Django1.8.2中文文档:Django1.8.2中文文档

静态文件

静态文件的使用

在 网页使用的css文件,js文件和图片等叫做静态文件。
1)在项目下新建静态文件夹 static。

2) 配置静态文件所在的物理目录。Settings.py

  • STATIC_URL设置访问静态文件对应的url。
  • STATICFILES_DIRS设置静态文件所在的物理目录。

动态生成静态文件的路径

即不管你的 STATIC_URL 怎么变,也对页面上的静态文件url获取没影响

settings.py

# 设置访问静态文件的url地址
# http://127.0.0.1:8000/static/images/mm.jpg,通过这个,可以直接访问图片
STATIC_URL = '/static/'
# STATIC_URL = '/abc/' # 设置静态文件存放的物理目录
# Django找静态文件的顺序:先去配置的 STATICFILES_DIRS 下面去找,找不到就去应用下面的static下面找
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

static_test.html

<!DOCTYPE html>
{% load staticfiles %}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>静态文件测试</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body> <img src="/static/images/mm.jpg" alt="mm">
<img src="/abc/images/mm.jpg" alt="mm"> 动态获取 STATIC_URL,拼接静态文件路径:<br>
<img src="{% static 'images/mm.jpg' %}" alt="mm"> </body>
</html>

配套函数

def static_test(request):
"""静态文件"""
return render(request, 'booktest/static_test.html')

中间件

中间件函数是django框架给我们预留的函数接口,让我们可以干预请求和应答的过程。

使用中间件

1)在应用中新建middleware.py文件。

2)定义中间件类。

在类中定义中间件预留函数。

  • __init__:服务器响应第一个请求的时候调用。
  • process_request:是在产生request对象,进行url匹配之前调用。
  • process_view:是url匹配之后,调用视图函数之前。
  • process_response:视图函数调用之后,内容返回给浏览器之前。
  • process_exception:视图函数出现异常,会调用这个函数。

如果注册的多个中间件类中包含process_exception函数的时候,调用的顺序跟注册的顺序是相反的。
3)注册中间件类。

使用中间件进行登录判断案例

获取浏览器端的ip地址,使用request对象的META属性:

request.META['REMOTE_ADDR']

需求

当我们需要禁用某些恶意ip的访问时,需要获取用户ip,然后建立一个禁止ip列表,判断ip是否在禁止列表中,如果是恶意ip,则禁止进入,
否则返回响应的页面,诚然,我们可以定义一个装饰器来对每个函数进行判断,但这并不是最佳的选择,我们可以使用中间件。

单个函数判断

def index(request):
"""首页"""
user_ip = request.META['REMOTE_ADDR']
print(user_ip)
if user_ip in EXCLUDE_IPS:
return HttpResponse("<h2>Forbidden</h2>")
return render(request, 'booktest/index.html')

装饰器判断

def ban_ip(view_func):
"""用来禁止恶意ip的装饰器"""
def wrapper(request, *args, **kwargs):
user_ip = request.META['REMOTE_ADDR']
print(user_ip)
if user_ip in EXCLUDE_IPS:
return HttpResponse("<h2>Forbidden</h2>")
else:
return view_func(request, *args, **kwargs)
return wrapper @ban_ip
def index(request):
"""首页"""
return render(request, 'booktest/index.html')

中间件步骤

  • 1.在应用下新建一个middleware.py文件,名字随意,但一般用这个。
  • 2.编写中间件代码;
  • 3.在settings中注册中间件;

中间件判断

from django.utils.deprecation import MiddlewareMixin
from django.http import HttpResponse class BanIpMiddleware(MiddlewareMixin):
"""中间件类"""
EXCLUDE_IPS = ['127.0.0.1'] @staticmethod
def process_view(request, view_func, *args, **kwargs):
"""视图函数调用之前会调用"""
user_ip = request.META['REMOTE_ADDR']
if user_ip in BanIpMiddleware.EXCLUDE_IPS:
return HttpResponse("<h2>Forbidden</h2>")

注册中间件

MIDDLEWARE = [
'booktest.middleware.BanIpMiddleware',
]

中间件执行顺序

中间件的执行顺序一般是按照在settings文件里面的注册顺序来的,特殊情况是如果注册的多个中间件类中包含process_exception函数的时候,调用的顺序跟注册的顺序是相反的。

__init__只在服务器重启之后,第一个请求时调用,后面的请求都不会再调用了;

中间件执行顺序示例代码

class TestMiddleware(MiddlewareMixin):
"""中间件类"""
def __init__(self, get_response=None):
"""服务器重启之后,接收第一个请求时调用"""
# get_response参数是必需的,这个参数指的是下一个中间件或者view函数(如果是最后一个中间件)。
super().__init__()
self.get_response = get_response
print("-----init-----") @staticmethod
def process_request(request):
"""产生request对象之后,url匹配之前调用"""
print("-----process_request-----") @staticmethod
def process_view(request, view_func, *args, **kwargs):
"""url匹配之后,视图函数调用之前调用"""
print("-----process_view-----") @staticmethod
def process_response(request, response):
"""视图函数之后,应答返回浏览器之前"""
print("-----process_response-----")
return response # 执行结果:
# -----init-----
# -----process_request-----
# -----process_view-----
# -----process_response----- class ExceptionTest1Middleware(MiddlewareMixin):
@staticmethod
def process_exception(request, exception):
"""视图函数发生异常时调用"""
print("-----process_exception1-----")
print(exception) class ExceptionTest2Middleware(MiddlewareMixin):
@staticmethod
def process_exception(request, exception):
"""视图函数发生异常时调用"""
print("-----process_exception2-----")

admin后台管理

admin的使用

  • 1) 本地化。语言和时区本地化。
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
  • 2) 创建超级管理员。
python mange.py createsuperuser
  • 3) 注册模型类。
  • 4)
  • 4.1.自定义管理页面。
  • 4.2.自定义模型管理类。
  • 4.3.注册模型类的时候给register函数添加第二个参数,就是自定义模型管理类的名字。

列表页选项

列表页选项示例代码

models.py

class AreaInfo(models.Model):
"""地区模型类"""
# 地区名称
atitle = models.CharField(verbose_name="地区名", max_length=20)
# 自关联属性
aParent = models.ForeignKey('self', null=True, blank=True) # 在admin点进去表之后显示地区名
def __str__(self):
return self.atitle # 定义title列,提供显示atitle
def title(self):
return self.atitle
title.admin_order_field = 'id' # 定义title列的排序方式
title.short_description = '地区名称' # 定义title列显示的列名 def parent(self):
if self.aParent is None:
return ''
return self.aParent.atitle
parent.short_description = '父级地区名称'

admin.py

class AreaInfoAdmin(admin.ModelAdmin):
"""地区模型管理类"""
list_per_page = 10 # 指定每页显示10条数据
list_display = ['id', 'atitle', 'title', 'parent'] # 指定页面上展示的内容
actions_on_bottom = True # 开启下面的action框
actions_on_top = False # 关闭上建的action框
list_filter = ['atitle'] # 页表右侧的过滤兰
search_fields = ['atitle'] # 列表页上方的搜索框 admin.site.register(models.AreaInfo, AreaInfoAdmin)

注:list_display不仅可以写模型类的属性,还可以写方法;

显示效果

编辑页选项

初始效果图

fields控制显示字段顺序

class AreaInfoAdmin(admin.ModelAdmin):
fields = ['aParent', 'atitle'] # 控制编辑页中 显示字段的顺序

改变顺序后

分组显示

class AreaInfoAdmin(admin.ModelAdmin):
"""地区模型管理类"""
fieldsets = (
('基本', {'fields': ['atitle']}),
('高级', {'fields': ['aParent']})
)

分组显示效果图

应注意 ,fields和fieldsets不能同时使用。

关联对象/控制显示该地区下面的子级地区

块嵌入

# 块嵌入
class AreaStackedInline(admin.StackedInline):
# 写多类的名称
model = models.AreaInfo # 关联子对象
extra = 2 # 控制多余的行数/额外编辑2个子对象 class AreaInfoAdmin(admin.ModelAdmin):
"""地区模型管理类"""
inlines = [AreaStackedInline]

表嵌入

class AreaTabularInline(admin.TabularInline):
model = models.AreaInfo # 关联子对象
extra = 2 # 控制多余的行数/额外编辑2个子对象 class AreaInfoAdmin(admin.ModelAdmin):
"""地区模型管理类"""
inlines = [AreaStackedInline]

表嵌入效果图

块嵌入和表嵌入其实显示的内容是一样的,知识显示样式不同而已。

Django之静态文件,中间件,admin后台管理的更多相关文章

  1. dango 常用 静态文件 中间件 admin管理 上传图片

    静态文件 项目中的CSS.图片.js都是静态文件.一般会将静态文件放到一个单独的目录中,以方便管理.在html页面中调用时,也需要指定静态文件的路径,Django中提供了一种解析的方式配置静态文件路径 ...

  2. Django框架admin后台管理和用户端静态文件

    目录 一.admin后台管理 1. 如何使用 2. 路由分发的本质 二.用户上传的静态文件的展示 1. media配置 2. 手动开设media接口 三.图片防盗链 一.admin后台管理 djang ...

  3. django的admin后台管理

    Admin后台管理 要进入admin后台管理首先要创建管理员账户 createsuperuser 其中密码要大于8位 使用之前要到应用下的admin.py中注册要管理的模型表 from django. ...

  4. 第三百七十八节,Django+Xadmin打造上线标准的在线教育平台—django自带的admin后台管理介绍

    第三百七十八节,Django+Xadmin打造上线标准的在线教育平台—django自带的admin后台管理介绍 配置django的admin数据库管理后台 首先urls.py配置数据库后台路由映射,一 ...

  5. Django Admin后台管理模块的使用

    Admin后台管理模块的使用 Django的管理员模块是Django的标准库django.contrib的一部分.这个包还包括其它一些实用的模块: django.contrib.auth django ...

  6. python测试开发django-17.admin后台管理

    前言 通常一个网站开发,需要有个后台管理功能,比如用后台管理发布文章,添加用户之类的操作.django的admin后台管理主要可以实现以下功能 基于admin模块,可以实现类似数据库客户端的功能,对数 ...

  7. 1210 BBS admin后台管理及侧边栏筛选个人站点

    目录 昨日内容 django admin后台管理 使用 建表 用户图片的显示 MEDIA用户配置 查找照片 搭建个人站点 防盗链 新建css文件 侧边栏展示标签 定义分类栏与标签栏 定义时间栏 侧边栏 ...

  8. [Django框架 - 静态文件配置、request对象方法初识、 pycharm链接数据库、ORM实操增删改查、django请求生命周期]

    [Django框架 - 静态文件配置.request对象方法初识. pycharm链接数据库.ORM实操增删改查.django请求生命周期] 我们将html文件默认都放在templates文件夹下 将 ...

  9. django处理静态文件

    静态文件指的是js css 还有图片这些,配置方法如下 1. 在设置文件(settings.py)中,installed_apps中添加 django.contrib.staticfiles 然后设置 ...

随机推荐

  1. an introduction of google breakPad for android

    一.背景 众所周知,Android JNI层的Crash问题是个比较头疼的问题.相对Java层来说,由于c/c++造成的crash没有输出如同 Java的Exception Strace,所以cras ...

  2. Linux系统安装jdk——.tar.gz版(old)

    这里简单地阐述一下rpm.deb.tar.gz的区别. rpm格式的软件包适用于基于Red Hat发行版的系统,如Red Hat Linux.SUSE.Fedora. deb格式的软件包则是适用于基于 ...

  3. zabbix3.4用Python脚本Excel批量导入主机

    1.安装xlrd读取Excel文件 1.1. 下载setuptools-38.2.4.zip,上传至zabbix服务器解压安装,下载地址:https://pypi.python.org/package ...

  4. HTTP_2_HTTP协议概要

    http协议概要 HTTP 通信对象 通信方式 通信状态 定位资源 节省通信量 超文本传输协议 客户端与服务器端 请求和响应 不保存状态(借助cookie) 请求URI keep-alive/pipe ...

  5. 计算机原理以及PythonIDE配置和使用

    计算机基础 在巩固了昨日学习知识的基础上,增加了新的内容 整个关于计算机基础的学习可以浓缩为五个问题 什么是编程? 人与计算机之间的交互操作,使人可以奴役计算机从而让其代替人类工作的行为 操作系统有什 ...

  6. 入门MySQL——架构篇

    前言:  上篇文章我们介绍了入门MySQL的基本概念,看完上篇文章,相信你应该了解MySQL的前世今生了吧.本篇文章将带你从架构体系来学习MySQL.我认为学习MySQL架构体系应该是入门阶段必须的, ...

  7. linux下pip的安装

    ---恢复内容开始--- 1 输入apt-cache search wxpython 如果有返回信息 则输入 sudo apt-get install python-tools 2 否则 1.添加软件 ...

  8. 面向对象---prototype、__proto__、实例化对象三者之间的关系

    1.构造函数 a.什么是构造函数? 解释:通过关键字new 创建的函数叫做构造函数 作用:用来创建一个对象 废话少说直接上代码,首先我们还是创建一个构造函数人类 然后我们在创建两个实例,一个凡尘 一个 ...

  9. Quartz CronTrigger定时器表达式大全

    CronTrigger是基于Calendar-like调度的.当你需要在除星期六和星期天外的每天上午10点半执行作业时,那么应该使用CronTrigger.正如它的名字所暗示的那样,CronTrigg ...

  10. C# Winform 自定义控件——竖着的Navbar

    效果: 描述: 这是一个可折叠的菜单导航,主要是由panel.picturebox.label完成,界面的颜色用来区分一下各个组合控件,便于调试. 首先,首先是ImageButton: 这个是由Pic ...