干货 | django框架文案上传

2018年6月6日08:58:09 2 721 阅读

在平时的web开发中,文件上传是常见的功能,在django中实现文件的上传也非常简单,现步骤与其他功能实现类似:1.新建一个模板, 2.编写模板对应的view函数,3.配置view与模板关联的url,具体实现步骤如下:

 

第一步:项目的创建与运行

1.创建Django项目:

 

命令:  django-admin startproject myphotograph

我们来看看startproject创建的内容:

 


1
2
3
4
5
6
7
8
<span class="hljs-default-selector-attr" style="color: #d19a66; background: rgba(0, 0, 0, 0); display: inline; width: 191px; text-decoration: none solid #d19a66; font-weight: 400; font-style: normal;">[root@localhost myphotograph]</span># <span class="hljs-default-selector-tag" style="color: #e06c75; background: rgba(0, 0, 0, 0); display: inline; width: 27px; text-decoration: none solid #e06c75; font-weight: 400; font-style: normal;">tree</span>
.
├── <span class="hljs-default-selector-tag" style="color: #e06c75; background: rgba(0, 0, 0, 0); display: inline; width: 40px; text-decoration: none solid #e06c75; font-weight: 400; font-style: normal;">manage</span><span class="hljs-default-selector-class" style="color: #d19a66; background: rgba(0, 0, 0, 0); display: inline; width: 20px; text-decoration: none solid #d19a66; font-weight: 400; font-style: normal;">.py</span>
└── <span class="hljs-default-selector-tag" style="color: #e06c75; background: rgba(0, 0, 0, 0); display: inline; width: 79px; text-decoration: none solid #e06c75; font-weight: 400; font-style: normal;">myphotograph</span>
    ├── __<span class="hljs-default-selector-tag" style="color: #e06c75; background: rgba(0, 0, 0, 0); display: inline; width: 39px; text-decoration: none solid #e06c75; font-weight: 400; font-style: normal;">init__</span><span class="hljs-default-selector-class" style="color: #d19a66; background: rgba(0, 0, 0, 0); display: inline; width: 20px; text-decoration: none solid #d19a66; font-weight: 400; font-style: normal;">.py</span>
    ├── <span class="hljs-default-selector-tag" style="color: #e06c75; background: rgba(0, 0, 0, 0); display: inline; width: 52px; text-decoration: none solid #e06c75; font-weight: 400; font-style: normal;">settings</span><span class="hljs-default-selector-class" style="color: #d19a66; background: rgba(0, 0, 0, 0); display: inline; width: 20px; text-decoration: none solid #d19a66; font-weight: 400; font-style: normal;">.py</span>
    ├── <span class="hljs-default-selector-tag" style="color: #e06c75; background: rgba(0, 0, 0, 0); display: inline; width: 26px; text-decoration: none solid #e06c75; font-weight: 400; font-style: normal;">urls</span><span class="hljs-default-selector-class" style="color: #d19a66; background: rgba(0, 0, 0, 0); display: inline; width: 20px; text-decoration: none solid #d19a66; font-weight: 400; font-style: normal;">.py</span>
    └── <span class="hljs-default-selector-tag" style="color: #e06c75; background: rgba(0, 0, 0, 0); display: inline; width: 26px; text-decoration: none solid #e06c75; font-weight: 400; font-style: normal;">wsgi</span><span class="hljs-default-selector-class" style="color: #d19a66; background: rgba(0, 0, 0, 0); display: inline; width: 20px; text-decoration: none solid #d19a66; font-weight: 400; font-style: normal;">.py</span>

 

关于上面自动生成的目录与文件解释如下:

·    外部myphotograph /根目录只是一个项目的容器。它的名字与Django无关; 您可以将其重命名为您喜欢的任何内容。

·    manage.py:一个命令行实用程序,可以让您以各种方式与此Django项目进行交互。你可以阅读所有的细节 manage.py在Django的管理和manage.py。

·    内部myphotograph /目录是您的项目的实际Python包。它的名字是您需要用来导入其中的任何内容的Python包名称(例如myphotograph.urls)。

·    myphotograph /init.py:一个空的文件,告诉Python这个目录应该被认为是一个Python包。

·    myphotograph /settings.py:此Django项目的设置/配置。 Django设置会告诉你所有关于设置的工作原理。

·    myphotograph /urls.py:该Django项目的URL声明; 您的Django动力网站的“目录”。

·    myphotograph /wsgi.py:WSGI兼容的Web服务器为您的项目提供服务的入口点。

2.运行开发服务器

 

我们来验证您的Django项目的作品。更改为外部myphotograph目录,如果您还没有,并运行以下命令:

 


1
$ <span class="hljs-default-keyword" style="color: #c678dd; background: rgba(0, 0, 0, 0); display: inline; width: 40px; text-decoration: none solid #c678dd; font-weight: 400; font-style: normal;">python</span> manage.<span class="hljs-default-keyword" style="color: #c678dd; background: rgba(0, 0, 0, 0); display: inline; width: 14px; text-decoration: none solid #c678dd; font-weight: 400; font-style: normal;">py</span> runserver

注:若当前环境中有两个python环境,可使用python3python3.6命令来调用3.6的环境,如:
$ python3 manage.py runserver


1
 

 

您将在命令行中看到以下输出:


1
Performing system checks...

System check identified no issues (0 silenced).


1
 

You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.(注意:现在忽略关于未执行应用数据库迁移的警告)


1
 

August 07, 2017 - 15:50:53
Django version 1.11, using settings myphotograph.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.


1
 

 

以上说明已经开始使用Django的开发服务器,这是一个纯粹以Python编写的轻量级Web服务器。 我们将其与Django结合在一起,因此您可以快速开发,而无需处理配置生产服务器(如Apache),直到您准备好生产。

默认情况下,该runserver命令在端口8000的内部IP上启动开发服务器。当然也可以指定端口开启服务8080端口:


1
$ <span class="hljs-default-keyword" style="color: #c678dd; background: rgba(0, 0, 0, 0); display: inline; width: 40px; text-decoration: none solid #c678dd; font-weight: 400; font-style: normal;">python</span> manage.<span class="hljs-default-keyword" style="color: #c678dd; background: rgba(0, 0, 0, 0); display: inline; width: 14px; text-decoration: none solid #c678dd; font-weight: 400; font-style: normal;">py</span> runserver <span class="hljs-default-number" style="color: #d19a66; background: rgba(0, 0, 0, 0); display: inline; width: 26px; text-decoration: none solid #d19a66; font-weight: 400; font-style: normal;">8080</span>

 

如果要更改服务器的IP,请将其与端口一起传递。例如:


1
$ <span class="hljs-default-keyword" style="color: #c678dd; background: rgba(0, 0, 0, 0); display: inline; width: 40px; text-decoration: none solid #c678dd; font-weight: 400; font-style: normal;">python</span> manage.<span class="hljs-default-keyword" style="color: #c678dd; background: rgba(0, 0, 0, 0); display: inline; width: 14px; text-decoration: none solid #c678dd; font-weight: 400; font-style: normal;">py</span> runserver <span class="hljs-default-number" style="color: #d19a66; background: rgba(0, 0, 0, 0); display: inline; width: 7px; text-decoration: none solid #d19a66; font-weight: 400; font-style: normal;">0</span>:<span class="hljs-default-number" style="color: #d19a66; background: rgba(0, 0, 0, 0); display: inline; width: 27px; text-decoration: none solid #d19a66; font-weight: 400; font-style: normal;">8000</span>

 

注意:通过IP访问后报如下错误


1
2
DisallowedHost at /polls
    Invalid HTTP_HOST header: <span class="hljs-default-string" style="color: #98c379; background: rgba(0, 0, 0, 0); display: inline; width: 118px; text-decoration: none solid #98c379; font-weight: 400; font-style: normal;">'192.168.*.*:8000'</span>. You may need <span class="hljs-default-keyword" style="color: #c678dd; background: rgba(0, 0, 0, 0); display: inline; width: 14px; text-decoration: none solid #c678dd; font-weight: 400; font-style: normal;">to</span> <span class="hljs-default-built_in" style="color: #e6c07b; background: rgba(0, 0, 0, 0); display: inline; width: 20px; text-decoration: none solid #e6c07b; font-weight: 400; font-style: normal;">add</span> <span class="hljs-default-string" style="color: #98c379; background: rgba(0, 0, 0, 0); display: inline; width: 85px; text-decoration: none solid #98c379; font-weight: 400; font-style: normal;">'192.168.*.*'</span> <span class="hljs-default-keyword" style="color: #c678dd; background: rgba(0, 0, 0, 0); display: inline; width: 13px; text-decoration: none solid #c678dd; font-weight: 400; font-style: normal;">to</span> ALLOWED_HOSTS.

HTTP_HOST标头无效:'192.168.*.*:8000'。您可能需要将“192.168.*.*”添加到ALLOWED_HOSTS
如:ALLOWED_HOSTS = ['192.168.104.240']
或:ALLOWED_HOSTS = ['192.168.104.240','localhost','127.0.0.1']
或支持所有 ALLOWED_HOSTS = ['*']


1
 

 

第二步:应用的创建

(1). 创建一个应用程序

Django自带一个实用程序,可以自动生成应用程序的基本目录结构,因此您可以专注于编写代码而不是创建目录。

要创建您的应用程序,请确保您与目录位于同一目录,manage.py 并键入以下命令:


1
$ <span class="hljs-default-keyword" style="color: #c678dd; background: rgba(0, 0, 0, 0); display: inline; width: 40px; text-decoration: none solid #c678dd; font-weight: 400; font-style: normal;">python</span> manage.<span class="hljs-default-keyword" style="color: #c678dd; background: rgba(0, 0, 0, 0); display: inline; width: 14px; text-decoration: none solid #c678dd; font-weight: 400; font-style: normal;">py</span> startapp myapp

注:若当前环境中有两个python环境,可使用python3python3.6命令来调用3.6的环境,如:
$ python3 manage.py startapp myapp


1
 

 

这将创建一个目录myapp,其目录如下:此目录结构将容纳轮询应用程序。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@localhost myphotograph]# tree myphotograph /
myphotograph /
├── manage.<span class="hljs-default-keyword" style="color: #c678dd; background: rgba(0, 0, 0, 0); display: inline; width: 14px; text-decoration: none solid #c678dd; font-weight: 400; font-style: normal;">py</span>
├── myphotograph
│   ├── __init__.<span class="hljs-default-keyword" style="color: #c678dd; background: rgba(0, 0, 0, 0); display: inline; width: 13px; text-decoration: none solid #c678dd; font-weight: 400; font-style: normal;">py</span>
│   ├── settings.<span class="hljs-default-keyword" style="color: #c678dd; background: rgba(0, 0, 0, 0); display: inline; width: 13px; text-decoration: none solid #c678dd; font-weight: 400; font-style: normal;">py</span>
│   ├── urls.<span class="hljs-default-keyword" style="color: #c678dd; background: rgba(0, 0, 0, 0); display: inline; width: 13px; text-decoration: none solid #c678dd; font-weight: 400; font-style: normal;">py</span>
│   └── wsgi.<span class="hljs-default-keyword" style="color: #c678dd; background: rgba(0, 0, 0, 0); display: inline; width: 13px; text-decoration: none solid #c678dd; font-weight: 400; font-style: normal;">py</span>
└── myapp
    ├── admin.<span class="hljs-default-keyword" style="color: #c678dd; background: rgba(0, 0, 0, 0); display: inline; width: 13px; text-decoration: none solid #c678dd; font-weight: 400; font-style: normal;">py</span>
    ├── apps.<span class="hljs-default-keyword" style="color: #c678dd; background: rgba(0, 0, 0, 0); display: inline; width: 13px; text-decoration: none solid #c678dd; font-weight: 400; font-style: normal;">py</span>
    ├── __init__.<span class="hljs-default-keyword" style="color: #c678dd; background: rgba(0, 0, 0, 0); display: inline; width: 13px; text-decoration: none solid #c678dd; font-weight: 400; font-style: normal;">py</span>
    ├── migrations
    │   └── __init__.<span class="hljs-default-keyword" style="color: #c678dd; background: rgba(0, 0, 0, 0); display: inline; width: 14px; text-decoration: none solid #c678dd; font-weight: 400; font-style: normal;">py</span>
    ├── models.<span class="hljs-default-keyword" style="color: #c678dd; background: rgba(0, 0, 0, 0); display: inline; width: 13px; text-decoration: none solid #c678dd; font-weight: 400; font-style: normal;">py</span>
    ├── tests.<span class="hljs-default-keyword" style="color: #c678dd; background: rgba(0, 0, 0, 0); display: inline; width: 13px; text-decoration: none solid #c678dd; font-weight: 400; font-style: normal;">py</span>
    └── views.<span class="hljs-default-keyword" style="color: #c678dd; background: rgba(0, 0, 0, 0); display: inline; width: 13px; text-decoration: none solid #c678dd; font-weight: 400; font-style: normal;">py</span>

 

(2). 手动创建templates 和static文件夹

创建好以后在myphotograph下的settings里边,进行如下设置:

 

1.将创建好的app进行添加:

 

干货 | django框架文案上传

 

注:要是要添加多个app的话,记得加逗号

 

2.设置TEMPLATES的DIRS:

 

代码如下:(os.path.join(BASE_DIR,’templates’)

 

干货 | django框架文案上传

 

3.设置静态文件:

 

干货 | django框架文案上传

 

注:中间不要有空格或者其他符号,格式必须标准,否则静态文件就不会起作用,导致图片不能正常显示。

第三步:模板路由视图的编写

(1). 模板models的配置

1>倒入需要使用的模块

干货 | django框架文案上传

 

2>定义photo类

干货 | django框架文案上传

注:_str_方法的用途是将数据格式化输出

 

3> 因为需要连接数据库进行数据的处理,所以需要在myphotograph的settings下边设置一下数据库的连接,即配置一下DATABASES

干货 | django框架文案上传

注:user和password根据自己的设置来进行更改,host这里可以写成你的本机ip也可以写成localhost

 

4>关于数据库连接这里还有最重要的一点就是myphotograph下的init.py文件

干货 | django框架文案上传

注:导入pymysql模块后,进行上图的操作.这样才能保证数据库的正常连接,是数据库连接的重中之重。

(2). 配置主路由和子路由

1.在myapp下手动创建一个urls.py文件

2. 在myphotograph下的urls,py文件中进行配置

 

1>在第一行代码中导入include

 

干货 | django框架文案上传

 

2>将myapp的urls添加进主路由中

 

干货 | django框架文案上传

注:这样做就可以在开始访问时直接跳转到myapp的子路由文件

 

4.配置子路由

 

1>  先导入需要使用的包和视图文件

 

干货 | django框架文案上传

 

2> 将需要实现的功能进行整理,然后根据需求来编写路由:

 

干货 | django框架文案上传

注:

1>  在浏览相册路由这里必须设置pIndex,因为pindex是分页操作时最重要的一个参数.

 

干货 | django框架文案上传

 

2>  在编辑相册和删除相册时的uid也是进行操作的唯一标识,千万不要忘记,注意书写格式

 

干货 | django框架文案上传

干货 | django框架文案上传

 

3>  每个路由后面的name属性,就是给这个操作起了一个别名,也可以说是外号,在用浏览器进行访问时,就可以用别名进行访问

 

(3).templates模板的创建

1>在templates下创建一个myapp文件夹

2>创建需要用到的多个模板页面

 

干货 | django框架文案上传

 

注:

1>  menu.html是主模板,也可以理解为页面显示的主样式

2>  在继承menu.html时注意书写格式,花括号里边套上百分号

 

干货 | django框架文案上传

 

3>  在html中要想将数据变成活的,也就是从数据库中提取数据的话,一个是在页面内注意书写格式,还有一个是在views.py下的操作,如下图

 

干货 | django框架文案上传

 

注:在结尾的时候不要忘记写{%endfor%},来结束循环,否则数据不会显示出来

 

4>  每个页面有每个页面各自的功能,也就是每个页面form表单的action后边是不一样的,后边跟着不同的路由

 

干货 | django框架文案上传

注:根据你自己的路由配置和以页面的功能,看情况来书写路由。书写格式必须正确。

(4). Views视图的实现

1>先导入所需要的包

干货 | django框架文案上传

 

2>根据路由和需要实现的功能来写函数

干货 | django框架文案上传

干货 | django框架文案上传

注:

1>一定要对urls.py,index.html和views.py的pindex进行确认,防止少传漏传

2>封装完context后不要忘记把context传入到页面中

 

干货 | django框架文案上传

干货 | django框架文案上传

注:

1>  注意缩放后的图片的保存路径,在static静态文件下建立一个pics文件夹

2>  写的时候尽量 用 try 和except这样方便错误的排查

 

干货 | django框架文案上传

注:这个函数是进行信息的编辑操作,注意在函数中必须把uid传递进来

 

注:这个函数是将编辑完成后的信息进行保存和提交,即在数据库中进行更改

 

注:uid必须传到函数里边,这样才能进行下一步操作。群  

本篇文章来源于微信公众号: 程序人生

张晔璇

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:2   其中:访客  1   博主  1

    • avatar 猫鼬博客 3
      Google Chrome 65.0.3325.181 Google Chrome 65.0.3325.181 Windows 7 x64 Edition Windows 7 x64 Edition
      Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36

      大锅,你懂得有点多啊。
      各路语言都会啊。

        • avatar 张晔璇 Admin
          Google Chrome 67.0.3396.99 Google Chrome 67.0.3396.99 Windows 10 x64 Edition Windows 10 x64 Edition
          Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36

          额 不多啊!就会php 和js熟悉,其他语言都是新手!!!

          @猫鼬博客