国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

利用Django通用類視圖(class-based view)編寫數據驅動(ModeForm)WEB

CarterLi / 1280人閱讀

摘要:既然是數據驅動的,首先就必須要有數據。也符合它用于查看數據的需求。說明模板中的對象就是從中取出的數據。以的類型存儲著所有數據。修改視圖接下來就是第二類修改視圖了。其中的會將中的該字段設為類型而則是帶有清除文件功能的類型。

最近在學習Django,官方文檔介紹地十分詳細。但是“大而全”就難免會有些不夠速成,和我們這個浮躁的互聯網時代格格不入,所以我就整理了這個文檔。就像coolshell說的,一泡屎的時間就可以看完。


框架的好處就是,它已經為用戶處理了絕大多數的場景中的重復代碼,提供了封裝好的接口,使得我們在開發中十分方便。在web開發中,我們常常遇到的一個場景就是:頁面發起一個請求,后端執行相應的處理(修改數據、查詢數據、插入數據等操作),再予以返回。

對于這些場景,Django提供了幾個class-based view來處理:

ListView

UpdateView

CreateView

DeleteView

這幾個類視圖分別對應著查詢ListView、更新UpdateView、創建CreateView、刪除DeleteView這幾個操作。在整體上就可以分為查看、修改兩個類型。下面,我們來通過一個例子來展現一下這幾個View怎么使用。假設我們需要實現一個用于ssh驗證的web服務。用戶通過頁面可以新建、查看、修改用于ssh登陸驗證的內容(user、port、password、key)。

Model

既然是數據驅動的WEB,首先就必須要有數據。
針對于我們的需求,數據庫設計如下:

class SSHAuth(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=50, unique=True)
    password = models.CharField(max_length=50, blank=True)
    privateKey = models.FileField(upload_to="sshKey", blank=True)
    user = models.CharField(max_length=30, blank=True)
    port = models.IntegerField(blank=True)

    # python3用__str__
    def __unicode__(self):
        return u"%s" % self.name

這里涉及到文件上傳,想要了解可以參考我的另一篇整理文檔。

查詢視圖 ListView

對應官網文檔
首先,從最簡單的展示開始。ListView可以通過你給出的model以及想要展示的model中的field,在對應的數據庫中查詢出對應的對象存放在List對象中,并傳遞給template渲染。這個view只實現了get方法,它只接受get請求。也符合它用于查看數據的需求。在代碼中,我們只需要指定它對應的模板,對應的model就可以了。

view
from django.views.generic.edit import CreateView


class SSHAuthListView(ListView):

    template_name = "app_name/sshauth_list.html"
    model = SSHAuth

說明:
上面我沒有給出filed的值,默認就是SSHAuth這個model中的所有filed都將被展示。
其實template_name也可以不特別給出。如果你在Django設置settings.py中的TEMPLATES下配置了"APP_DIRS": True 的話,Django默認會去渲染/project/app_name/templates/app_name/sshauth_list.html這個文件。

url
from django.conf.urls import patterns, url
from .view import SSHAuthListView
urlpatterns = patterns("",
    url(r"^sshAuth/$", SSHAuthListView.as_view(), name="listSSHAuth"),
template

    {% for item in object_list %}
        
    {% endfor %}
    
ID Name Password PrivateKey User Port
{{ item.id }} {{ item.name }} {{ item.password }} {{ item.privateKey }} {{ item.user }} {{ item.port }}

說明:
模板中的object_list對象就是view從model中取出的數據。以list的類型存儲著所有數據instance。這個"object_list"的變量名是Django默認提供的,也可以人為修改為你想要的變量名,詳細請看官網文檔。


修改視圖

接下來就是第二類修改視圖了。在web開發中約定俗成的規則是,對于查詢類的請求用get,對于修改類的請求用post。Django在設計的時候也遵循了這個原則,所以以下的每個view中,都具有支持get和post的函數。

CreateVIew:

get——根據model提供一個空form

post——接收從get發來的請求,數據合法性校驗,插入數據庫

UpdateView:

get——根據model從數據庫取出實例,并渲染form

post——接收從get來的請求,數據合法性校驗,并更新數據庫

CreateView

對應官網文檔

view
class SSHAuthCreateView(CreateView):

    template_name = "app_name/ssh_create.html"
    model = SSHAuth
    success_url = reverse_lazy("app_name:listSSHAuth")

說明:
model就是對應的數據庫,在get請求發送過來的時候,Django會根據model里的字段個數、類型渲染form。而在post請求發送過來的時候,Django會根據model里的field屬性去做合法性校驗(類型是否正確、字段是否必填等),在校驗成功以后重定向至success_url。

像上面的SSHAuthCreateView直接取model里面的數據,在password輸入的時候input的type默認取的是text(因為model為CharField)。但是我們想要它是一個password的type。或者你想給它加入class屬性,用于指定css。這樣的話,就要自定制form。可以自己寫一個form_class,然后在CreateView里面添加這個form_class。

form
from django import forms
from .models import SSHAuth, Inventory


bootstrap_form_css_class = {"class": "form-control"}

class SSHAuthBootstrapForm(forms.ModelForm):
    """
    Use Bootstrap css.
    An abstract base class.
    """
    class Meta:
        model = SSHAuth
        fields = ["name", "password", "privateKey", "user", "port"]
        # add html class attribute to form"s component.
        widgets = {
            "name": forms.TextInput(attrs=bootstrap_form_css_class),
            "password": forms.PasswordInput(attrs=bootstrap_form_css_class),
            "privateKey": forms.ClearableFileInput(attrs=bootstrap_form_css_class),    
            #ClearableFileInput提供對UpdateView的clear支持
            "user": forms.TextInput(attrs=bootstrap_form_css_class),
            "port": forms.TextInput(attrs=bootstrap_form_css_class),
        }

說明:
fields字段為想要展示的字段,因為id是自增的主鍵,所以不做修改。widgets為form的字段類型以及html屬性。其中的PasswordInput會將form中的該字段設為password類型;而ClearableFileInput則是帶有清除文件功能的類型。

這樣,只需要在view當中加入這個form_class就可以實現模板中渲染的form表單具有自定義的屬性了:

class SSHAuthCreateView(CreateView):

    template_name = "app_name/ssh_create.html"
    form_class = SSHAuthBootstrapForm
    success_url = reverse_lazy("app_name:listSSHAuth")
url
url(r"^sshAuth/createItem/$", SSHAuthCreateView.as_view(), name="createSSHAuth"),
template
{% csrf_token %} {% for field in form %} {% if field.errors %}
{% else %}
{% endif %} {{ field.label_tag }} {{ field }} {% for error in field.errors %} {{ error }} {% endfor %}
{% endfor %}
html

生成的html代碼如下:

在渲染的時候,Django已經自動根據model、form_class自動處理了form的所有字段。包括type name id maxlength等屬性。


剩下的UpdateView以及DeleteView與CreateView的實現也是相類似的原理。需要注意的就是在view代碼中,即使是指定了form_class字段,而且form_class中也有指定model,但是還是需要在view代碼里給出model。具體實現不再贅述。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/37676.html

相關文章

  • Django中的文件上傳(利用class-based view)

    摘要:背景介紹在的官網上有專門介紹如何處理文件上傳的文檔,其中說到了如何利用來處理文件上傳的場景。但是,在中最快速的開發方式是利用來進行開發。上面用到了動態的,對應每個都提供不同的上傳路徑。在實際的使用中,可以針對于自己的應用場景選擇。 背景介紹 在Django的官網上有專門介紹如何處理文件上傳的文檔,其中說到了如何利用model來處理文件上傳的場景。但是,在Django中最快速的開發方式是...

    oogh 評論0 收藏0
  • Django搭建個人博客:基于視圖

    摘要:有編程基礎的同學都知道,類是面向對象技術中非常重要的概念。有區別的是,是作為功能添加到子類中的,而不是作為父類。首先調用父類方法,將這個對象賦值給變量,然后再對其進行統計瀏覽量的操作,最后將對象返回。 說是完結,馬上又開始寫進階篇了。 本章不會為博客項目增加新功能,但是也同樣重要,因為我們要學習高逼格的基于類的視圖。 什么是類視圖 前面章節中寫的所有視圖都是基于函數的,即def;而類視...

    QiShare 評論0 收藏0
  • django rest framework個人學習筆記(六)————Tutorial4.認證于授權

    摘要:另外一個字段用于儲存突出顯示的代碼的表示形式。這將確保認證用戶擁有讀寫權限,而未認證用戶只有讀的權限。唯一的限制是必須是。 官網地址目前,我們的API沒有對如 edit 或者 delect做出任何限制。我們希望有一些更加高級的功能能夠做到: Code snippets 應該永遠和創建者相關 只有認證的用戶才能夠創建snippets 只有創建者才能更新或者刪除他的snippet 沒有認...

    eternalshallow 評論0 收藏0
  • django rest framework個人學習筆記(六)————Tutorial4.認證于授權

    摘要:另外一個字段用于儲存突出顯示的代碼的表示形式。這將確保認證用戶擁有讀寫權限,而未認證用戶只有讀的權限。唯一的限制是必須是。 官網地址目前,我們的API沒有對如 edit 或者 delect做出任何限制。我們希望有一些更加高級的功能能夠做到: Code snippets 應該永遠和創建者相關 只有認證的用戶才能夠創建snippets 只有創建者才能更新或者刪除他的snippet 沒有認...

    MonoLog 評論0 收藏0
  • django rest framework個人學習筆記(六)————Tutorial4.認證于授權

    摘要:另外一個字段用于儲存突出顯示的代碼的表示形式。這將確保認證用戶擁有讀寫權限,而未認證用戶只有讀的權限。唯一的限制是必須是。 官網地址目前,我們的API沒有對如 edit 或者 delect做出任何限制。我們希望有一些更加高級的功能能夠做到: Code snippets 應該永遠和創建者相關 只有認證的用戶才能夠創建snippets 只有創建者才能更新或者刪除他的snippet 沒有認...

    caozhijian 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<