ホームページ  >  記事  >  バックエンド開発  >  Python + Django はファイルのアップロードを迅速に実装します

Python + Django はファイルのアップロードを迅速に実装します

WBOY
WBOYオリジナル
2016-12-05 13:27:121767ブラウズ

Web 開発では、ユーザーのログイン、登録、ファイルのアップロードなど、さまざまな Web フレームワークに関する関連記事が多数ありますが、検索したところ、それらのほとんどが完全ではないことがわかりました。 Web 開発を学ぶ 初心者にとって、段階的に練習する方法はありません。Web アプリケーションの場合、データベースの作成、フロントエンド ページの開発、中間ロジック層の処理が含まれます。

この連載では、操作性を重視し、Django Web フレームワークを介していくつかの簡単な機能を実装する方法を紹介します。各章は完全で独立しています。初心者でもWeb開発のプロセスを実際に体験することができます。詳細については、プロセス中に関連ドキュメントを参照してください。

この操作の環境:
===================
deepin linux 2013 (ubuntu ベース)
Python2.7
ジャンゴ 1.6.2
===================

プロジェクトとアプリケーションを作成する

#プロジェクトの作成

fnngj@fnngj-H24X:~/djpy$ django-admin.py startproject mysite2
fnngj@fnngj-H24X:~/djpy$ cd mysite2
#プロジェクト配下にディスクアプリケーションを作成
fnngj@fnngj-H24X:~/djpy/mysite2$ python manage.py startapp ディスク

ディレクトリ構造は次のとおりです:


mysite2/mysite2/settings.py ファイルを開き、それにディスク アプリケーションを追加します。


リーリー

設計モデル (データベース)
mysite2/disk/models.py ファイルを開き、次のコンテンツを追加します


リーリー

2 つのフィールドを作成します。username user にはユーザー名が格納され、headImg user にはアップロードされたファイルのパスが格納されます。


以下はデータベースの同期です


リーリー

最終的に生成されたdisk_userテーブルは、models.pyで作成されたクラスです。 Django はそれらの間の通信を提供します。


ビューの作成

1. mysite2/disk/views.py ファイルを開きます
リーリー

2. 登録ページを作成します

まず mysite2/disk/ ディレクトリに templates ディレクトリを作成し、次に mysite2/disk/templates/ ディレクトリに register.html ファイルを作成します。

リーリー


3. テンプレートのパスを設定します

mysite2/mysite2/settings.py ファイルを開き、一番下に次の内容を追加します:

リーリー


4. URLを設定します

リーリー


5.サービスを開始します

リーリー


6. http://127.0.0.1:8000/disk/

にアクセスします。

登録ページが正常に開くことができれば、すべてのプロセスが完了したことを意味します。これは Django 開発の基本ルーチンでもあります。読者は、この基本的なルーチンを十分に理解している必要があります。

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

打开mysite2/disk/templates/register.html 文件:

<&#63;xml version="1.0" encoding="UTF-8"&#63;> 
<!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>

打开mysite2/disk/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://127.0.0.1:8000/disk/ 页面

填写用户名,选择本地上传文件,点击“ok”

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

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

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',
)

再次刷新http://127.0.0.1:8000/disk/ 页面,我们就可以正常将用户名和文件提交了!

将数据写入数据库         

虽然已经实现了数据的提交,但用户名与文件并没有真正的写入到数据库。我们来进一步的完善mysite2/disk/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://127.0.0.1:8000/disk/ 页面,完成文件的上传。

那数据库中保存的是什么呢?

fnngj@fnngj-H24X:~/djpy/mysite2$ sqlite3 db.sqlite3 
SQLite version 3.7.15.2 2013-01-09 11:53:05
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> select * from disk_user;
1 | Alen  | upload/desk.jpg
sqlite> 

通过查看数据库发现,我们数据库中存放的并非用户上传的文件本身,而是文件的存放路径。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。