この記事では主に、Django プロジェクトでのユーザー アバターのアップロードとアクセスの実践例を紹介します。一緒に見てみましょう
1 ファイルをサーバー上にローカルに保存します
upload.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> </head> <body> <form action="" method="post" enctype="multipart/form-data"> {% csrf_token %} <p>用户名:<input type="text" name="username"></p> <p>头像<input type="file" name="avatar"></p> <input type="submit" value="提交"> </form> </body> </html>
urls.py
from django.conf.urls import url from app01 import views urlpatterns = [ url(r'^upload',views.upload) ]
views.py
概要
このようにして、ファイルアップロードの基本的な小さな例を作成しました。 ここで注意すべき点がいくつかあります:
1. csrf_token 検証をフォームに追加する必要があります
2. のタイプファイルの入力ボックス 値は file です
3. view 関数でファイルを取得するには、request.FILES.get() メソッドを使用します
4. ファイルの名前は obj.name を通じて取得できます
2 ファイルをデータベース
models にアップロードします。データベースへのファイルのアップロードは注意すべき点がいくつかあります:
1. いわゆるデータベースへのアップロードは、画像自体やバイナリ コードをデータベースに配置することを意味するものではありません。データベースはファイルのパスのみを保存するため、ユーザーがファイルを呼び出したいときに、そのパスを使用してサーバーによって指定された場所を見つけることができます。
3. データベースに追加するとき、ファイル フィールド属性の割り当ては、通常のフィールドと同じ形式になります。たとえば、models.User.objects.create(username=name, avatar=avatar)
4. 2 人のユーザーがアップロードしたファイル名が同じである場合、システムはファイルの名前を自動的に変更します。その効果は次のとおりです:追加の
機能を実装しました。ファイルを呼び出すときは、データベース ファイル パスを介して保存されたファイル自体を介して画像にアクセスし、それを Web ページに表示するだけでよいようです。これは当てはまりません
設定手順は次のとおりです:
1.
from django.shortcuts import render,HttpResponse
def upload(request):
if request.method == 'POST':
name = request.POST.get('username')
avatar = request.FILES.get('avatar')
with open(avatar.name,'wb') as f:
for line in avatar:
f.write(line)
return HttpResponse('ok')
return render(request,'upload.html')
を設定します。サイトのsetting.py内のurls.py 設定後、http://127.0.0.1:8001/media/milk.png から画像にアクセスできます
3 AJAX を使用してファイルを送信します
from django.db import models class User(models.Model): username = models.CharField(max_length=16) avatar = models.FileField(upload_to='avatar')
views.py
def upload(request): if request.method == 'POST': name = request.POST.get('username') avatar = request.FILES.get('avatar') models.User.objects.create(username=name,avatar=avatar) return HttpResponse('ok') return render(request,'upload.html')
概要
1. Ajax がアップロードするとき、ボタンの入力には submit を使用してはなりません2。ですが、これは FormData オブジェクトです
オブジェクトを作成します formdata = new FormData();
それに値を追加します formdata.append('username',$('#name-input').val()) ;
formdata.append("csrfmiddlewaretoken",$("[name='csrfmiddlewaretoken']").val());
4. 最後に、Ajax経由でファイルをアップロードする際のパラメータ設定は2つあります
MEDIA_ROOT=os.path.join(BASE_DIR,"blog","media") #blog是项目名,media是约定成俗的文件夹名 MEDIA_URL="/media/" # 跟STATIC_URL类似,指定用户可以通过这个路径找到文件
5 概要
ファイルをアップロードする場合、それが直接フォーム送信であろうと Ajax 送信であろうと、根本的な問題は、アップロードしたいのはファイルであり、通常の文字列ではないことをブラウザーに伝えることです
2. Ajax 経由でアップロードする場合は、processData:false と contentType:false で ContentType を指定します
3. アップロードする場合form 、ファイル データは タグによって「ラップ」されます。関連する推奨事項:
Django が css ファイル、js ファイル、および静的画像をロードする方法
Django コントロールの使用方法とパラメーターの受け渡しについての詳細な説明
以上がDjango プロジェクトの実用的なユーザー アバターのアップロードとアクセスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。