author: 溫柔易淡(Leo),歡迎技術交流與拍磚html
咱們在前端寫表單的時候,其實可使用django自帶的forms功能來實現,特別是在處理 修改已經存在數據 的場景特別好用,下面說說他。前端
咱們先從後臺提及,這個流程是這樣的:當用戶查看某一個條目的詳細新的時候,咱們首先獲取這個條目的詳細信息在數據庫裏,而後塞入到表單裏面渲染,這樣傳到前端就是這個條目的詳細信息了,用戶能夠修改而後保存。
對此咱們須要作的工做就是application下面建立一個form的py文件,我建立的文件名是formself,文件結構以下:node
[root@linux-node2 devops]# tree BatchM BatchM # 項目名 ├── Batch # application名字 │ ├── formself.py # form文件,自定義
from django.forms import Form,ModelForm # 導入這兩個模塊 # ModelForm把 models裏到數據變成一個表單,能夠用的html頁面上 from Batch import models class ApplyUpdateForm(ModelForm): class Meta: model = models.WorkOrderOfUpdate # 和哪一個數據庫綁定在一塊 exclude = ('email_issend','tags',) # 排除哪一個字段 def __init__(self, *args, **kwargs): # 繼承父類,後重寫本身的類 super(ApplyUpdateForm, self).__init__(*args, **kwargs) for field_name in self.base_fields: # 遍歷每個字段 field = self.base_fields[field_name] field.widget.attrs.update({'class': 'form-control'}) # 給每個輸入框添加上一個樣式
from Batch import models from Batch import formself #導入剛纔咱們自定義的form文件 def apply_detail(request,order_id): ''' 顯示一個工單詳情 :param request: :param order_id: 工單ID :return: ''' order_detail = models.WorkOrderOfUpdate.objects.get(OrderId=order_id) # 取出這個條目的全部信息 form = formself.ApplyUpdateForm(instance=order_detail) # 把這個條目的信息塞入到表單裏,instance就是從哪一個對象裏面獲取數據 return render(request,'update_order_detail.html',{'selfforms':form}) # 把作好的表單返回到前端html文件裏面經過form這個對象。
'''省去不相關的代碼 {% block page_content %} # 使用jinja修改母板的內容 <a href="/BatchM/apply_update.html/search/"><button class="btn btn-default" >返回上一頁</button></a><br><br> {{ selfforms }} # 寫上這個,就可以自動在前端展現弄好的表單了。 {% endblock %}
好了,展現功能搞定了,還能夠在這基礎之上作一個保存功能,即在用戶修改完表單的內容後,提交它,後端把這些表單的數據入庫。咱們就須要在後端添加幾行代碼,主要針對post請求處理,前端只添加須要<form> </form> <input type='submit' value=‘提交’>
2個類型標籤,申明提交地址,提交方法爲post,就好了。linux
後端view代碼以下:數據庫
from Batch import models from Batch import formself #導入剛纔咱們自定義的form文件 def apply_detail(request,order_id): ''' 顯示一個工單詳情 :param request: :param order_id: 工單ID :return: ''' if request.method == "GET": order_detail = models.WorkOrderOfUpdate.objects.get(OrderId=order_id) # 取出這個條目的全部信息 form = formself.ApplyUpdateForm(instance=order_detail) # 把這個條目的信息塞入到表單裏,instance就是從哪一個對象裏面獲取數據 render(request,'update_order_detail.html',{'selfforms':form}) #把作好的表單返回到前端html文件裏面經過form這個對象。 elif request.method == "POST": # 處理提交上來的數據 form_obj = getattr(formself,ApplyUpdateForm) # ApplyUpdateForm是在formself定義好的類 fm_result = form_obj(request.POST) # 把提交的數據塞入剛纔的對象裏面 if fm_result.is_valid(): # 若是數據與數據庫表之間可以匹配,也就是提交的表單內容正確 fm_result.save() # 那麼就入庫。 return return HttpResponseRedirect('/') else: return HttpResponse('信息不全')
前端代碼就不在贅述了。django
至此,form的簡單介紹到此結束,更多功能能夠參考官網地址:https://docs.djangoproject.com/en/1.10/topics/forms/後端