Python+django实现简单的文件上传
今天分享一下Django实现的简单的文件上传的小例子。 步骤 下面我们就一起来分别完成每一个小部分吧。 创建项目和应用 django-admin startproject Django_upload django-admin startapp app 添加一个名为upload的目录,待会要用哦。 然后记得在settings.py 中的INSTALLED_APPS中加上'app',。注意那个小逗号就行了~~ 设计模型 上传文件需要知道是谁上传的,上传了什么。所以我们的 模型很简单,一个用户名,一个文件名即可。如下app.models.py from __future__ import unicode_literals from django.db import models # Create your models here. # User CLass for user,username and userimg path class NormalUser(models.Model): username = models.CharField(max_length=30) headImg = models.FileField(upload_to='./upload') def __unicode__(self): return self.username class Meta: ordering = ['username'] 模型创建完成了,接下来我们就赶紧同步一下数据库吧。命令很简单,由于我的Django版本是1.9.6的, 所以原来的 python manage.py syncdb 不能用了 我们可以使用下面的命令来代替 python manage.py makemigrations python manage.py migrate urls.py 以及 views.py 这两个文件就是为了实现MVC模型的V,C而存在的。 from django.shortcuts import render,render_to_response from django import forms from django.http import HttpResponse from app.models import * # Create your views here. class NormalUserForm(forms.Form): username = forms.CharField() headImg = forms.FileField() def registerNormalUser(request): if request.method == "POST": uf = NormalUserForm(request.POST,request.FILES) if uf.is_valid(): # get the info of the form username = uf.cleaned_data['username'] headImg = uf.cleaned_data['headImg'] # write in database normalUser = NormalUser() normalUser.username = username normalUser.headImg = headImg normalUser.save() return HttpResponse('Upload Succeed!') else: uf = NormalUserForm() return render(request,'register.html',{'uf':uf}) urls.py """Django_upload URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/1.9/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: url(r'^$',views.home,name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: url(r'^$',Home.as_view(),name='home') Including another URLconf 1. Import the include() function: from django.conf.urls import url,include 2. Add a URL to urlpatterns: url(r'^blog/',include('blog.urls')) """ from django.conf.urls import url from django.contrib import admin from app.views import * urlpatterns = [ url(r'^admin/',admin.site.urls),url(r'^register/$',registerNormalUser),] 一般来说我们会创建一个超级管理员,命令如下: python manage.py createsuperuser 然后按照相应的提示进行创建就可以了。 设计模板以及表单 其实刚才就可以在views.py中看到一个为NormalUserForm的类,其存在的意义就是方便从request中取得我们需要的表单数据。而且,恐怕你也注意到了,NormalUserForm的字段和NormalUser模型是一样的呢。各中哲理自己品味吧 :-) templates/register.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Register</title> </head> <body> <h2 align="center">Register</h2> <form method="POST" enctype="multipart/form-data"> {% csrf_token %} {{ uf.as_p }} <input type="submit" value="Submit"> </form> </body> </html> 这里面比较重要的地方有三点: •{% csrf_token %}: 跨域请求,我们需要在表单标签的内部加上这个模板标签,而且要在views.py中配合render而不是render_to_response来实现 •{{ uf.as_p }}: 使用.as_p 方式的话,django就会按照默认的样式在模板页面输出表单的所有的字段。 调试,开启应用 好了,大部分的任务都做好了,下面就打开我们的开发服务器来验证一下吧。 python manage.py runserver 打开浏览器输入http://127.0.0.1:8000/register 然后按要求填写表单,就可以了。彩蛋就是加上了is_valid()方法的views.py会自动的帮助我们对表单数据字段进行验证! 打开我们的数据库管理软件,就会发现里面存储的只是路径,而并不是真正的数据。这也体现了大数据存储的核心理念了。点击upload目录,发现文件确实上传成功了! 总结 今天的这个小例子虽然很简单,但是里面也有很多值得我们推敲的地方,我的收获如下。 •对应模型添加一个表单类,字段相同。这样对于表单数据的获取会更加更加的方便。uf = NormalUserForm(request.POST,request.FILES)。 •模板界面表单enctype格式,以及.as_p方式的在html页面上的表单输出 就是这样了! 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |