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. [leetcode] 559. Maximum Depth of N-ary Tree (easy)

    原题链接 思路: 简单bfs class Solution { public: int maxDepth(Node *root) { int depth = 0; if (root == NULL) ...

  2. 你真的了解 Cookie 和 Session 吗

    我在做面试官的时候,曾经问过很多朋友这个问题: Cookie 和 Session 有什么区别呢?大部分的面试者应该都可以说上一两句,比如:什么是 Cookie?什么是 Session?两者的区别等. ...

  3. 从后端到前端之Vue(三)小结以及一颗真实的大树

    上一篇写了一下tab,下面整理一下用过的知识点,本想按照官网的文档,整理一下可以更清晰,结果也许是我的方法不对吧,总之更模糊了. 按照官网文档的顺序整理到了表单输入绑定之前,因为之前大致也就只涉及到这 ...

  4. <java程序大集合>

    1.以下关于开发java程序的描述错误的是(). A.开发java程序的步骤包括:编写源程序,编译,运行 B.编写的java源程序文件使用.java作为扩展名 C:java源文件经编译后,生成后娺为. ...

  5. Nginx 的简单使用 (IIS,Asp.Net)

    Nginx 的一些常见功能(windows,AspNet ,IIS) 下载 官方网站:https://nginx.org/en/download.html 下载,解压缩是这个样子 启动: 启动方式有两 ...

  6. spring boot中的声明式事务管理及编程式事务管理

    这几天在做一个功能,具体的情况是这样的: 项目中原有的几个功能模块中有数据上报的功能,现在需要在这几个功能模块的上报之后生成一条消息记录,然后入库,在写个接口供前台来拉取消息记录. 看到这个需求,首先 ...

  7. kubernetes离线包分析

    k8s离线包解析 产品地址 鸣谢 大家好,首先感谢大家对我们产品的支持,特别是一些老客户的持续支持,让我可以有动力把这个事情持续进行下去. 感谢大家对付费产品的认可,尊重付费 产品介绍 我们专注于k8 ...

  8. 自己学习并保存的一些shell命令

    摘要: 在学习过程中,不免会遇到有些命令,那种需要的,但是你没有掌握的命令.为了节省时间,担心忘记这些,特开辟这个随笔,随时记录用到的一些命令.那么常用的不提了,自己去收集吧~ 1.文件按日期排序 应 ...

  9. 使用python画2D线条

    """用于验证整体趋势正确性,不做关闭操作时保持显示""" #!python3 #-*- coding:utf-8 -*- import m ...

  10. Redis集群与spring的整合

    上一篇详细的赘述了Redis的curd操作及集群的搭建.下面我们开始将他整合到我们实际的项目中去.我的项目采用的是标准的ssm框架,ssm框架这里不说,直接开始整合. 首先在maven管理中将我们的j ...