linux下python+django实现文件上传功能

linux

python 2.7

django 1.11.3

 

创建项目:django-admin.py startproject myproject    #myproject为你的项目目录名

进入项目目录:cd myproject   

#在项目下创建一个disk应用: python manage.py startapp mydisk

目录结构如下:

打开mysite2/mysite2/settings.py文件,将disk应用添加进去(通过vim命令编辑settings.py文件  可以百度vim命令用法):

Application definition

INSTALLED_APPS = (

 'django.contrib.admin',

 'django.contrib.auth',

 'django.contrib.contenttypes',

 'django.contrib.sessions',

 'django.contrib.messages',

 'django.contrib.staticfiles',

 'mydisk',

)

设计Model(数据库)                                                                          

打开myproject/mydisk/models.py文件,添加如下内容(如上 通过vim命令即可)

1

2

3

4

5

6

7

8

9

from django.db import models

 

# Create your models here.

class User(models.Model):

 username = models.CharField(max_length = 30)

 headImg = models.FileField(upload_to = './upload/')

 

 def __unicode__(self):

  return self.username

创建两个字段,username 用户存放用户名,headImg 用户存放上传文件的路径。

创建网站管理用户

下面进行数据库的同步:python manage.py migrate   #django1.9之前版本可用python manage.py syncdb  

创建视图                                                                                                
1、打开myproject/mydisk/views.py 文件(通过vim编辑)

1

2

3

4

5

from django.shortcuts import render,render_to_response

 

# Create your views here.

def register(request):

 return render_to_response('register.html',{})

 

 2、创建注册页面

先在myproject/mydisk/目录下创建templates目录,接着在myproject/mydisk/templates/目录下创建register.html 文件:

可在vim 插入模式下将下面复制粘贴 然后esc + wq退出

1

2

3

4

5

6

7

8

9

10

11

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>

 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

 <title></title>

</head>

<body>

<h1>register</h1>

</body>

</html>

 

创建项目:django-admin.py startproject myproject #myproject为你的项目目录名

进入项目目录:cd myproject   

#在项目下创建一个disk应用: python manage.py startapp mydisk

目录结构如下:(apps.py是后面手误创建了)

打开mysite2/mysite2/settings.py文件,将disk应用添加进去(通过vim命令编辑settings.py文件 可以百度vim命令用法):

Application definition

INSTALLED_APPS = (

 'django.contrib.admin',

 'django.contrib.auth',

 'django.contrib.contenttypes',

 'django.contrib.sessions',

 'django.contrib.messages',

 'django.contrib.staticfiles',

 'mydisk',

)

设计Model(数据库)                                                                          

打开myproject/mydisk/models.py文件,添加如下内容(如上 通过vim命令即可)

from django.db import models

# Create your models here.

class User(models.Model):

 username = models.CharField(max_length = 30)

 headImg = models.FileField(upload_to = './upload/')

 def __unicode__(self):

  return self.username

创建两个字段,username 用户存放用户名,headImg 用户存放上传文件的路径。

 

下面进行数据库的同步:python manage.py migrate #django1.9之前版本可用python manage.py syncdb

创建视图                                                                                                

1、打开myproject/mydisk/views.py 文件(通过vim编辑)

from django.shortcuts import render,render_to_response

# Create your views here.

def register(request):

 return render_to_response('register.html',{})

 2、创建注册页面

先在myproject/mydisk/目录下创建templates目录,接着在myproject/mydisk/templates/目录下创建register.html 文件:

可在vim 插入模式下将下面复制粘贴 然后esc + wq退出

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>

 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

 <title></title>

</head>

<body>

<h1>register</h1>

</body>

</html>

 

3、设置模板路径(1.8版本后不设置好像也ok)

打开myproject/myproject/settings.py文件,在底部添加:

from django.shortcuts import render,render_to_response

# Create your views here.

def register(request):

 return render_to_response('register.html',{})

4、设置URL

 from django.contrib import admin
 from django.conf.urls import include,url
 from mydisk import views
 
 urlpatterns = [
     url(r'^admin/', admin.site.urls),
     url(r'^mydisk/', views.register),
 ]          


5.启动服务  python manage.py runserver 10.12.142.90:8001  (其中10.12.142.90是我服务器的ip)

1

2

3

4

5

6

7

8

fnngj@fnngj-H24X:~/djpy/mysite2$ python manage.py runserver

Validating models...

 

0 errors found

May 20, 2014 - 13:49:21

Django version 1.6.2, using settings 'mysite2.settings'

Starting development server at http://127.0.0.1:8000/

Quit the server with CONTROL-C.

出现如下界面:


 

 

我们只是把过程串了起来,细心你一定发现,我们的register.html 文件,并没有创建用户提交的表单,views.py文件中也并没有对用户提交的信息做处理。下面我们就针对这两个文件进一步的补充。

打开myproject/mydisk/templates/register.html 文件   (通过vim编辑)

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 <title></title>
</head>
<body>
<h1>register</h1>
<form method="post" enctype="multipart/form-data" >
{{uf.as_p}}
<input type="submit" value="ok"/>
</form>
</body>
</html>

打开myproject/mydisk/views.py 文件:

from django.shortcuts import render,render_to_response

from django import forms

from django.http import HttpResponse

# Create your views here.

 

class UserForm(forms.Form):

 username = forms.CharField()

 headImg = forms.FileField()

 

def register(request):

 if request.method == "POST":

  uf = UserForm(request.POST,request.FILES)

  if uf.is_valid():

   return HttpResponse('upload ok!')

 else:

  uf = UserForm()

 return render_to_response('register.html',{'uf':uf})

再次刷新http://10.12.142.90:8000/mydisk/ 页面

其中会抛出一个错误,这个错误比较友好,所以不是我们操作过程中的小错误。

 打开myproject/myproject/settings.py文件,将下面一行代码注释:

?

1

2

3

4

5

6

7

8

MIDDLEWARE_CLASSES = (

 'django.contrib.sessions.middleware.SessionMiddleware',

 'django.middleware.common.CommonMiddleware',

 #'django.middleware.csrf.CsrfViewMiddleware',

 'django.contrib.auth.middleware.AuthenticationMiddleware',

 'django.contrib.messages.middleware.MessageMiddleware',

 'django.middleware.clickjacking.XFrameOptionsMiddleware',

)

 

将数据写入数据库          

虽然已经实现了数据的提交,但用户名与文件并没有真正的写入到数据库。我们来进一步的完善myproject/mydisk/views.py 文件:

#coding=utf-8

from django.shortcuts import render,render_to_response

from django import forms

from django.http import HttpResponse

from disk.models import User

 

# Create your views here.

class UserForm(forms.Form):

 username = forms.CharField()

 headImg = forms.FileField()

 

def register(request):

 if request.method == "POST":

  uf = UserForm(request.POST,request.FILES)

  if uf.is_valid():

   #获取表单信息

   username = uf.cleaned_data['username']

   headImg = uf.cleaned_data['headImg']

   #写入数据库

   user = User()

   user.username = username

   user.headImg = headImg

   user.save()

   return HttpResponse('upload ok!')

 else:

  uf = UserForm()

 return render_to_response('register.html',{'uf':uf})

再次刷新http://10.12.142.90:8001/mydisk/ 页面,完成文件的上传。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值