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. FAIRR

    FAIRR 在进行一项工作时需要注意学习.应用和改进已有信息和成果,可参考FAIRR原则: Find existing info and result, Add to and Improve it, ...

  2. 【微信小程序】微信小程序-实现tab

    一.前言 小程序开发中,有很多封装好的控件供开发者使用,但是,很常见的tab选项卡居然没有,只能自己搞一个. 实现原理也很简单,无非是用给view(tab)设置一个点击事件bintap,并且给view ...

  3. IOCP Input/Output Completion Port IO完成端口

    I/O completion ports provide an efficient threading model for processing multiple asynchronous I/O r ...

  4. Python小故事--------Tkinter的组件描述及解析

    概念 Tkinter: 是Tk图形用户界面工具包标准(ctl)的Python接口,作为一个轻量级的跨平台图形用户界面(GUI)开发工具 frame: 屏幕上的一块矩形区域,多是用来作为容器(conta ...

  5. python课堂整理2

    一.字节和编码 1个字节是8位二进制 utf-8 表示一个中文要用3个字节 gbk 为中国汉字发明,2个字节可表示汉字 所以 utf-8 可以读gbk编码,而gbk去读utf-8 的内容会乱码 uni ...

  6. 关于JLINK调试时出现的 erasing range....的问题结果方法

    声明:本人当然不是提倡盗版. 昨天在使用JLINK的时候遇到了这个问题,但是非常蹊跷,首先可以下载,但不能进入调试,到后来完成不能下载了. 这个问题的原因就是你得Keil检测到你锁使用的JLINK不是 ...

  7. win10去除快捷方式小箭头

    切忌删除注册表项: HKEY_CLASSES_ROOT -> lnkfile -> IsShortcut 这个方法以前是可以的,但是在2018年之后更新的系统就会出现任务栏图标打不开的情况 ...

  8. 新IT运维时代 | Docker运维之最佳实践-下篇

    上篇针对操作系统.主机配置.容器镜像.容器运行时四大方面分享一些Docker的运维经验,本篇将着重在Docker Daemon参数和权限两个方面进一步分享.(阅读上篇请点击右侧:新IT运维时代 | D ...

  9. .net core 实现基于 cron 表达式的任务调度

    .net core 实现基于 cron 表达式的任务调度 Intro 上次我们实现了一个简单的基于 Timer 的定时任务,详细信息可以看这篇文章. 但是使用过程中慢慢发现这种方式可能并不太合适,有些 ...

  10. 湫湫系列故事——设计风景线 HDU - 4514

    题目链接:https://vjudge.net/problem/HDU-4514 题意:判断没有没有环,如果没有环,通俗的讲就是找出一条最长的路,相当于一笔画能画多长. 思路:dfs判环. 最后就是没 ...