ホームページ  >  記事  >  バックエンド開発  >  Django プロジェクトの実用的なユーザー アバターのアップロードとアクセス

Django プロジェクトの実用的なユーザー アバターのアップロードとアクセス

不言
不言オリジナル
2018-04-21 14:49:062177ブラウズ

この記事では主に、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&#39;^upload&#39;,views.upload)
]

views.py

りー

概要

このようにして、ファイルアップロードの基本的な小さな例を作成しました。 ここで注意すべき点がいくつかあります:
1. csrf_token 検証をフォームに追加する必要があります
2. のタイプファイルの入力ボックス 値は file です
3. view 関数でファイルを取得するには、request.FILES.get() メソッドを使用します
4. ファイルの名前は obj.name を通じて取得できます

2 ファイルをデータベース

models にアップロードします。データベースへのファイルのアップロードは注意すべき点がいくつかあります:
1. いわゆるデータベースへのアップロードは、画像自体やバイナリ コードをデータベースに配置することを意味するものではありません。データベースはファイルのパスのみを保存するため、ユーザーがファイルを呼び出したいときに、そのパスを使用してサーバーによって指定された場所を見つけることができます。

2. ORM を作成するとき、アバターフィールドには、upload_to= が必要です。 '' 属性を使用して、アップロードされたファイルを配置する場所を指定します

3. データベースに追加するとき、ファイル フィールド属性の割り当ては、通常のフィールドと同じ形式になります。たとえば、models.User.objects.create(username=name, avatar=avatar)

4. 2 人のユーザーがアップロードしたファイル名が同じである場合、システムはファイルの名前を自動的に変更します。その効果は次のとおりです:


追加の

機能を実装しました。ファイルを呼び出すときは、データベース ファイル パスを介して保存されたファイル自体を介して画像にアクセスし、それを Web ページに表示するだけでよいようです。これは当てはまりません

何かを設定する必要があります。そうしないと、静的ファイルに静的に直接アクセスできる理由は、django がすでに設定しているためです。






設定手順は次のとおりです:

1.


from django.shortcuts import render,HttpResponse 
def upload(request):
  if request.method == &#39;POST&#39;:
    name = request.POST.get(&#39;username&#39;)
    avatar = request.FILES.get(&#39;avatar&#39;)
    with open(avatar.name,&#39;wb&#39;) as f:
      for line in avatar:
        f.write(line)
    return HttpResponse(&#39;ok&#39;)
  return render(request,&#39;upload.html&#39;)

を設定します。サイトのsetting.py内のurls.py 設定後、http://127.0.0.1:8001/media/milk.png から画像にアクセスできます


3 AJAX を使用してファイルを送信します

upload.html


from django.db import models
 class User(models.Model):
  username = models.CharField(max_length=16)
  avatar = models.FileField(upload_to=&#39;avatar&#39;)

views.py

def upload(request):
  if request.method == &#39;POST&#39;:
    name = request.POST.get(&#39;username&#39;)
    avatar = request.FILES.get(&#39;avatar&#39;)
    models.User.objects.create(username=name,avatar=avatar)
    return HttpResponse(&#39;ok&#39;) 
  return render(request,&#39;upload.html&#39;)

概要

1. Ajax がアップロードするとき、ボタンの入力には submit を使用してはなりません

2。ですが、これは FormData オブジェクトです

オブジェクトを作成します formdata = new FormData();

それに値を追加します formdata.append('username',$('#name-input').val()) ;

3.Ajax は送信後の実行時に csrf 検証を追加する必要があります


formdata.append("csrfmiddlewaretoken",$("[name='csrfmiddlewaretoken']").val());

4. 最後に、Ajax経由でファイルをアップロードする際のパラメータ設定は2つあります


processData:false


    contentType:false
  1. 4 画像ファイルをアップロードする際のプレビュー機能があります

MEDIA_ROOT=os.path.join(BASE_DIR,"blog","media") #blog是项目名,media是约定成俗的文件夹名

MEDIA_URL="/media/"   # 跟STATIC_URL类似,指定用户可以通过这个路径找到文件

  1. 5 概要

ファイルをアップロードする場合、それが直接フォーム送信であろうと Ajax 送信であろうと、根本的な問題は、アップロードしたいのはファイルであり、通常の文字列ではないことをブラウザーに伝えることです

  1. 方法通常の文字列をアップロードする場合、デフォルト値があるため、ブラウザーにそれを伝える必要はありません

  2. そして、ファイルを転送したい場合は、それを指定する必要があります。別途指定します。ポイントをまとめると以下の通りです
  3. 1. フォームをアップロードする場合は、enctype="multipart/form-data" で ContentType を指定します

    2. Ajax 経由でアップロードする場合は、processData:false と contentType:false で ContentType を指定します

    3. アップロードする場合form 、ファイル データは 3525558f8f338d4ea90ebf22e5cde2bc タグによって「ラップ」されます。
  4. 4. Ajax がアップロードするとき、データは FormData インスタンス オブジェクトを介して追加されます。
5. データが渡された後、request.POST ではなく request.FILES にカプセル化されます

関連する推奨事項:

Django が css ファイル、js ファイル、および静的画像をロードする方法

Django コントロールの使用方法とパラメーターの受け渡しについての詳細な説明

以上がDjango プロジェクトの実用的なユーザー アバターのアップロードとアクセスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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