2014-03-25 67 views
0

這裏是具有一個例子: 具有三個表單字段即如何在django中保存POST數據?

from django import forms 
from models import Article 

class ArticleForm(forms.ModelForm): 
    class Meta: 
     model = Article 
     fields = ('title','body','thumbnail') 

視圖

from django.shortcuts import render_to_response 
from uploadfiles.models import Article 
from django.http import HttpResponse, HttpResponseRedirect 
from forms import ArticleForm 
from django.core.context_processors import csrf 

def create (request): 
    if request.POST: 
     form = ArticleForm(request.POST, request.FILES) 
     if form.is_valid(): 
      return HttpResponseRedirect('/all') 
    else: 
     form = ArticleForm() 
    args= {} 
    args.update(csrf(request)) 
    args['form'] = form 
    return render_to_response('create_article.html', args) 

模型

from django.db import models 
from time import time 
def get_upload_file_name(request): 
    return "uploaded_files/%s_%s" %(str(time()).replace('.','-')) 


class Article(models.Model): 
    title = models.CharField(max_length=200) 
    body = models.TextField() 
    thumbnail = models.FileField(upload_to = get_upload_file_name) 
    def __unicode__(self): 
     return self.title 

html頁面

<!DOCTYPE html> 

<html> 
<head> 
    <title>Page Title</title> 
</head> 

<body> 

<form action="/create" method="post" enctype="multipart/form-data">{% csrf_token %} 
{{form.as_ul}} 
<input type="submit" name="submit" value="create"/> 
</form> 

</body> 
</html> 

我的問題是:

1)什麼是元級的,我們爲什麼用這個?

2)這一行是什麼意思args.update(csrf(request))

3)在窗體頁面重定向到/create ..因爲這可以是任何頁面!所以現在如何保存發佈的數據。因爲這會將提交的數據返回到html頁面。

我的問題可以是如此基本或簡單,但這些是我不明白的事情,因此我在這裏張貼這個!它可以複製,所以如果你不喜歡它,請不要標記爲負數。:)

回答

1

1) Metaclass是創建類的'東西'。

您可以定義類來創建對象,對吧?

但我們瞭解到Python類是對象。

好吧,元類是創建這些對象的東西。他們是班班,你能想象他們這樣說:

MyClass = MetaClass() 
MyObject = MyClass() 

你見過那種可以讓你做這樣的事情:

MyClass = type('MyClass',(), {}) 

這是因爲功能型,其實是元類。 type是Python用於在幕後創建所有類的元類。

現在你想知道爲什麼heck是用小寫寫的,而不是Type?

嗯,我想這是與str的一致性問題,創建字符串對象的類,以及int創建整數對象的類。 type只是創建類對象的類。

更多的幫助看到這個MetaClasses


2) 跨站點請求僞造(CSRF)

跨站請求僞造孔是當一個惡意網站可能會導致訪問者的瀏覽器向您的服務器發出請求,以引起服務器上的更改。服務器認爲,因爲請求附帶了用戶的cookie,用戶希望提交該表單。

根據形成在您的網站是脆弱的,攻擊者可能可以做以下的受害者:

  • 登錄受害人您的網站的。 (在一些網站上,「註銷」是鏈接 而不是一個按鈕!)
  • 使用受害者的登錄在您的網站發表評論。
  • 將資金轉移到其他用戶的帳戶。

爲了防止這種情況,我們使用這個update(csrf(request))

的詳細信息,請參閱本ABOUT CSRFCSRF django


3) /create是你目前的控制器的作用,如果你看到你的控制器頁在那裏你可以看到這個函數的創建功能,你會得到你的POST數據

1

1)元=類元數據。這是您定義模型的不同元數據元素的位置

2)CSRF =這是防止跨站點攻擊的標記。這是一個隱藏字段/屬性,添加到您的請求,以確保有人不能破解您的網站

3)提交的數據進入視圖,在那裏您可以保存您的數據。或者我誤解了你的問題....

相關問題