0

私は Django を使用して自分用の小さなブログ アプリに取り組んでおり、https://github.com/GoodCloud/django-ajax-uploaderを使用してファイル アップロード機能を導入しました。うまく機能しているようです。

ファイルのアップロードと一緒に (連絡先) フォームを追加したいのですが、フォームをファイルのアップロードに「リンク」する方法がわかりません。したがって、私の論理は、ユーザーが連絡先フォームに入力してからファイルをアップロードすることです (そして、明らかに「送信」を押します)。私の質問 (これを明確にしているかどうかはわかりません) は、連絡先フォームの内容 (名前、電子メール ID など) と、ユーザーが django-ajax-uploader を使用してアップロードしたファイルとの間のリンクを作成する方法です。 . これを行う最も効率的な方法は何でしょうか?

それが役立つ場合は、modelForms を使用して (連絡先) フォームを作成する予定です。これにより、明らかにフィールドがデータベースに書き込まれます。ただし、django-ajax-uploader はデータベースを使用しないため、両方をリンクする方法がわかりません。さらに、次の手順を使用してモデルフォームにrecaptcha を含めました: http://www.marcofucci.com/tumblelog/26/jul/2009/integrating-recaptcha-with-django/私の関数ファイルアップがフォームを処理すること。

これに関するガイダンスは素晴らしいでしょう。ありがとう。

更新されたコードは次のとおりです: http://dpaste.com/750619/

4

2 に答える 2

1

連絡先フォームにファイル アップロード ボタンを表示できる唯一の方法は、そのテンプレートを使用することです。次のようにテンプレートを編集する必要があります。

<form action="/contact/" method="post">{% csrf_token %}

{{ form.as_p }}

<!-- this block is required to show file upload button --->
<div id="file-uploader">       
   <noscript>          
       <p>Please enable JavaScript to use file uploader.</p>
   </noscript>         
</div>
<!-- end file upload button-->

<input type="submit" value="Submit" />
</form>

送信ボタンをクリックしたときとファイルをアップロードしたときは、別のリクエストになります。送信フォームはビューの " fileup " 関数によって処理され、ファイルのアップロードは " import_uploader " によって処理されます。この要求を同時に行うことはできません。

Contact モデルでファイル名も保存するには、次のことを行う必要があります。

  1. 最初にファイルのアップロードを行います ( File Uploader POST request )。
  2. ajax ファイル アップローダから返されたファイル名を取得し、この値を「fnames」フィールドに設定します (最後のコメントで js/jquery 手法を使用して)。ただし、この場合、「fnames」フィールドはテキストフィールドとしてレンダリングされます。そのため、最後のコードで HiddenInput を使用しているため、表示する必要はありませんが、存在します。
  3. フォーム送信ボタンをクリックし続けると、フォームがファイル名とともに送信されます。(お問い合わせフォーム POST リクエスト)

モデルのfnamesは必須であるため、フォーム全体を送信する前に、ユーザーがファイルをアップロード済みであることを確認する必要があります。

于 2012-05-20T15:54:38.217 に答える
1

あなたの目標についての私の理解から、サーバーにアップロードされたファイルとフォームを接続する唯一のものは、ファイルアップローダー自体から返される応答であるようです。

ajax ファイル アップローダーから応答を受け取ったら、アップロードされたファイル名をキャッチして、フォームの隠しファイルに設定する必要があります。

フォームは次のようになります。

class MyForm(forms.Form):
    name = forms.CharField()
    email = forms.EmailField()
    the_file = forms.CharField(widget=forms.HiddenInput())

ファイルの Javascript コードで、このセクションに追加します。

...
...,
onComplete: function(id, fileName, responseJSON) {
    if(responseJSON.success) {
        //Note that i add "id_" in front of field name, because django automatically add this when rendering the form.
        $('#id_the_file').val(fileName);
     } else {
        alert("upload failed!");
    }
},
...
...

そうすれば、ユーザーが連絡先フォームを送信するときに、少なくともファイル名がフォームに含まれるようになります。

メールを送信するときにファイルの完全な URL を取得するのはあなたの仕事です。これまでのところ、サーバー上の完全なファイルの URL ではなく、ファイル名しかわかっていないためです。

次に、メールのリンクまたは添付ファイルとして提供できます。

私はそれが役に立てば幸いです:)そして私の悪い英語を申し訳ありません...

于 2012-05-20T06:43:38.520 に答える