Ⅰ 如何用Django實現收藏功能
1. Django Forms的強大之處
有些django項目並不直接呈現HTML, 二是以API框架的形式存在, 但你可能沒有想到, 在這些API形式的django項目中也用到了django forms. django forms不僅僅是用來呈現HTML的, 他們最強的地方應該是他們的驗證能力. 下面我們就介紹幾種和Django forms結合使用的模式:
2. 模式一: ModelForm和默認驗證
最簡單的使用模式便是ModelForm和model中定義的默認驗證方式的組合:
myapp/views.py
from django.views.generic import CreateView, UpdateView
from braces.views import LoginRequiredMixin
from .models import Article
class ArticleCreateView(LoginRequiredMixin, CreateView):
model = Article
fields = (;title;, ;slug;, ;review_num;)
class ArticleUpdateView(LoginRequiredMixin, UpdateView):
model = Article
fields = (;title;, ;slug;, ;review_num;)
正如以上代碼中看到的一樣:
ArticleCreateView和ArticleUpdateView中設置model為Article
兩個view都基於Article model自動生成了ModelForm
這些ModelForm的驗證, 是基於Article model中定義的field轉換而來的
3. 模式二, 在ModelForm中修改驗證
在上面的例子中, 如果我們希望每篇article title的開頭都是new, 那麼應該怎麼做呢? 首先我們需要建立自定義的驗證(validator):
utils/validator.py
from django.core.exceptions import ValidationError
def validate_begins(value):
if not value.startswith(u;new;):
raise ValidationError(u;Must start with new;)
可見, 在django中的驗證程序就是不符合條件便拋出ValidationError的function, 為了方便重復使用, 我們將它們放在django app utils的validators.py中.
接下來, 我們可以在model中加入這些validator, 但為了今後的方便修改和維護, 我們更傾向於加入到ModelForm中:
myapp/forms.py
from django import forms
from utils.validators import validate_begin
from .models import Article
class ArticleForm(forms.ModelForm):
dev __init__(self, *args, **kwargs):
super(ArticleForm, self).__init__(8args, **kwargs)
self.fields[title].validators.append(validate_begin)
class Meta:
model = Article
Django的edit views(UpdateView和CreateView等)的默認行為是根據view中model屬性, 自動創建ModelForm. 因此, 我們需要調用我們自己的Modelform來覆蓋自動創建的:
myapp/views.py
from django.views.generic import CreateView, UpdateView
from braces.views import LoginRequiredMixin
from .models import Article
from .forms import ArticleForm
class ArticleCreateView(LoginRequiredMixin, CreateView):
model = Article
fields = (;title;, ;slug;, ;review_num;)
form_class = ArticleForm
class ArticleUpdateView(LoginRequiredMixin, UpdateView):
model = Article
fields = (;title;, ;slug;, ;review_num;)
form_class = ArticleForm
4. 模式三, 使用form的clean()和clean_lt;field;()方法
如果我們希望驗證form中的多個field, 或者驗證涉及到已經存在之後的數據, 那麼我們就需要用到form的clean()和clean_lt;field;()方法了. 以下代碼檢查密碼長度是否大於7位, 並且password是否和password2相同:
myapp/forms.py
from django import forms
class MyUserForm(forms.Form):
username = forms.CharField()
password = forms.CharField()
password2 = forms.CharField()
def clean_password(self):
password = self.cleaned_data[;password;]
if len(password) lt;= 7:
raise forms.ValidationError(password insecure)
return password
def clean():
cleaned_data = super(MyUserForm, self).clean()
password = cleaned_data.get(;password;, ;;)
password2 = cleaned_data.get(;password2;, ;;)
if password != password2:
raise forms.ValidationError(passwords not match)
return cleaned_data
其中需要注意的是, clean()和clean_lt;field;()的最後必須返回驗證完畢或修改後的值.
5. 模式四, 自定義ModelForm中的field
我們會經常遇到在form中需要修改默認的驗證, 比如一個model中有許多非必填項, 但為了信息完整, 你希望這些field在填寫時是必填的:
myapp/models.py
from django.db import models
class MyUser(models.Model):
username = models.CharField(max_lenh=100)
password = models.CharField(max_lenh=100)
address = models.TextField(blank=True)
phone = models.CharField(max_lenh=100, blank=True)
為了達到以上要求, 你可能會通過直接增加field改寫ModelForm:
請不要這么做
myapp/forms.py
from django import forms
from .models import MyUser
class MyUserForm(forms.ModelForm):
請不要這么做
address = forms.CharField(required=True)
請不要這么做
phone = forms.CharField(required=True)
class Meta:
model = MyUser
請不要這么做, 因為這違反不重復的原則, 而且經過多次的拷貝粘貼, 代碼會變得復雜難維護. 正確的方式應當是利用__init__():
myapp/forms.py
from django import forms
from .models import MyUser
class MyUserForm(forms.ModelForm):
def __init__(self, *args, **kwarg):
super(MyUserForm, self).__init__(*args, **kwargs)
self.fields[;address;].required = True
self.fields[;phone;].required = True
class Meta:
model = MyUser
值得注意的是, Django forms也是Python類, 類可以繼承和被繼承, 也可以動態修改.
Ⅱ django怎麼實現button按鈕與form表單關聯
確實。
如下的表單內容:
<form action="/save" method="post">
<input type="hidden" name="file_name" value={{file_name}}>
<input name="submit" type="submit" value="save" size="" />
<input name="submit" type="submit" value="cancel" size="" />
</form>
我在伺服器端可以通過request.post.get('submit') 為save 或者 cancel來判斷用戶點擊了哪個變數,這樣就方便多了,不需要用javascript了
Ⅲ django寫商業網站的時候用戶系統是自己重寫還是用自帶的
最好是是自帶的,因為基本夠用了,如果不夠用,User model有個get_profile函數,可以得到和User對象關聯的Profile對象,這個Profile可以有其他個人信息,而且大多數第三方django app都是依賴自帶User。
另外django1.5現在也支持自定義 User class,你可以看下。
Ⅳ django的架構設計
Django是一個基於MVC構造的框架。但是在Django中,控制器接受用戶輸入的部分由框架自行處理,所以 Django 里更關注的是模型(Model)、模板(Template)和視圖(Views),稱為 MTV模式。它們各自的職責如下: 層次 職責 模型(Model),即數據存取層 處理與數據相關的所有事務: 如何存取、如何驗證有效性、包含哪些行為以及數據之間的關系等。 模板(Template),即表現層 處理與表現相關的決定: 如何在頁面或其他類型文檔中進行顯示。 視圖(View),即業務邏輯層 存取模型及調取恰當模板的相關邏輯。模型與模板之間的橋梁。 從以上表述可以看出Django 視圖不處理用戶輸入,而僅僅決定要展現哪些數據給用戶,而Django 模板 僅僅決定如何展現Django視圖指定的數據。或者說, Django將MVC中的視圖進一步分解為 Django視圖 和 Django模板兩個部分,分別決定 「展現哪些數據」 和 「如何展現」,使得Django的模板可以根據需要隨時替換,而不僅僅限制於內置的模板。
至於MVC控制器部分,由Django框架的URLconf來實現。URLconf機制是使用正則表達式匹配URL,然後調用合適的Python函數。URLconf對於URL的規則沒有任何限制,你完全可以設計成任意的URL風格,不管是傳統的,RESTful的,或者是另類的。框架把控制層給封裝了,無非與數據交互這層都是資料庫表的讀,寫,刪除,更新的操作.在寫程序的時候,只要調用相應的方法就行了,感覺很方便。程序員把控制層東西交給Django自動完成了。 只需要編寫非常少的代碼完成很多的事情。所以,它比MVC框架考慮的問題要深一步,因為我們程序員大都在寫控制層的程序。現在這個工作交給了框架,僅需寫很少的調用代碼,大大提高了工作效率。
Ⅳ 用python3+django怎麼實現淘寶聯系賣家
淘寶聯系賣家其實是個獨立的功能,不是完全融合在html,簡單的實現還可以用tcp連接,一邊做服務端,一邊做客戶端,然後將數據寫進html
Ⅵ django 怎麼實現websocket
推薦使用Django channels,這東西有websocket功能
Ⅶ Django裡面怎麼實現資料庫視圖啊 就是虛擬表
正經回答:先在資料庫中建立好視圖,然後django中建立對應的model。表所對應的類下面再建立一個Meta類,大致如下
classViewModel(models.Model):
"""這個model類對應你所建立好的視圖"""
classMeta(object):
"""同理,該方法可用於使用mysql中任何已有的表,不僅是視圖"""
db_table='your_view'#顯式指定表名,也就是你建立的視圖的名字
managed=false#默認是ture,設成falsedjango將不會執行建表和刪表操作
#建立欄位間的映射
#需要注意的是,必須設一個欄位為主鍵
#不然django會自動創建一個id欄位為主鍵,引發錯誤
網路知道越來越辣雞了,全是答非所問的。
Ⅷ 已知博客源代碼,怎麼用Python實現框架是Django
Django框架相對比較大,Python的版本、django的版本操作也略有不同,所以這個不是一個回答能解決你的問題。
你首先要去學習django框架
Ⅸ 基於Django的實驗室任務管理系統的設計與實現,滿意追加100分,急啊!!
選題有些偏,沒有國內外研究動態。一個小項目,算不上研究。
如果一定要寫,可以落在任務管理系統本身上。 結合實驗室,應該是屬於OA的一個子類。OA系統中的一個任務管理系統。至於你為什麼用django,其實也與任務管理無關。django只是實現的一個手段。
研究動態可以從OA,教學任務管理等幾個方向查資料。你會發現很多「研究動態「,然後好好想一想你這個選題的意義是什麼。最後答辯時如何去向老師表明你的邏輯。
老實說我本人根本不看好這個題目,有些兒戲,可能1天就幹完的事情。 如果這個是你的畢業設計的話,對你」找工作「,也沒有價值。
Ⅹ django實現實時消息推送有什麼好的方案
貌似跟Django沒關系。
ajax輪詢。WebSocket 推薦