zoukankan      html  css  js  c++  java
  • dango 常用 静态文件 中间件 admin管理 上传图片

    静态文件

    项目中的CSS、图片、js都是静态文件。一般会将静态文件放到一个单独的目录中,以方便管理。在html页面中调用时,也需要指定静态文件的路径,Django中提供了一种解析的方式配置静态文件路径。静态文件可以放在项目根目录下,也可以放在应用的目录下,由于有些静态文件在项目中是通用的,所以推荐放在项目的根目录下,方便管理。

    示例

    1)在test5/settings.py文件中定义静态文件存放的物理目录。

    STATIC_URL = '/static/'
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static'),
    ]
    

    2)在项目根目录下创建static目录,再创建img、css、js目录。

    3)在booktest/views.py中定义视图static_test。

    def static_test(request):
        return render(request,'booktest/static_test.html')
    

    4)在booktest/urls.py中配置url。

        url(r'^static_test/$',views.static_test),
    

    5)在templates/booktest/下创建static_test.html文件。

    <html>
    <head>
        <title>静态文件</title>
    </head>
    <body>
    <img src="/static/img/sg.png"/>
    </body>
    </html>
    

    6)保存图片到static/img/目录下,名称为sg.png。

    中间件

    Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性,其它的MVC框架也有这个功能,名称为IoC。

    Django在中间件中预置了五个方法,这五个方法的区别在于不同的阶段执行,对输入或输出进行干预,方法如下:

    1)初始化:无需任何参数,服务器响应第一个请求的时候调用一次,用于确定是否启用当前中间件。

    def __init__(self):
        pass
    

    2)处理请求前:在每个请求上,request对象产生之后,url匹配之前调用,返回None或HttpResponse对象。

    def process_request(self, request):
        pass
    

    3)处理视图前:在每个请求上,url匹配之后,视图函数调用之前调用,返回None或HttpResponse对象。

    def process_view(self, request, view_func, *view_args, **view_kwargs):
        pass
    

    4)处理响应后:视图函数调用之后,所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象。

    def process_response(self, request, response):
        pass
    

    5)异常处理:当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象。

    def process_exception(self, request,exception):
        pass

    上传图片

    在python中进行图片操作,需要安装包PIL。

    pip install Pillow==3.4.1
    

    在Django中上传图片包括两种方式:

    • 在管理页面admin中上传图片
    • 自定义form表单中上传图片

    上传图片后,将图片存储在服务器上,然后将图片的路径存储在表中。

    创建包含图片的模型类

    将模型类的属性定义成models.ImageField类型。

    1)打开booktest/models.py文件,定义模型类PicTest。

    class PicTest(models.Model):
        pic = models.ImageField(upload_to='booktest/')
    

    2)回到命令行中,生成迁移。

    python manage.py makemigrations
    

    3)打开booktest/migrations/0001_initial.py文件,删除AreaInfo部分,因为这个表已经存在。

    上传图片

    4)回到命令行中,执行迁移。

    python manage.py migrate
    

    5)因为当前没有定义图书、英雄模型类,会提示“是否删除”,输入“no”后回车,表示不删除。

    上传图片

    6)打开test5/settings.py文件,设置图片保存路径。

    因为图片也属于静态文件,所以保存到static目录下。

    MEDIA_ROOT=os.path.join(BASE_DIR,"static/media")
    

    7)在static目录下创建media目录,再创建应用名称的目录,此例为booktest。

       

  • 相关阅读:
    zend framework多模块配置
    java解析xml的几种方式
    jdbc操作步骤和preparedStatment相比Statment的好处
    Android UI 之实现多级列表TreeView
    python小游戏实现代码
    【iOS知识学习】_UITableView简介
    根据指定电话号码得到通讯录上的姓名
    HDU 4705 Y
    C#实现的内存分页机制的一个实例
    【编程程序猿艺术】学习记录1:指针向左翻转法的旋转串
  • 原文地址:https://www.cnblogs.com/fromlantianwei/p/10310062.html
Copyright © 2011-2022 走看看