1. 程式人生 > >django url逆向解析和django form表單小記

django url逆向解析和django form表單小記

Django URL name詳解

# 在 urls.py檔案中
urlpatterns = [
    url(r'^$', calc_views.index, name='home'),
    url(r'^add/$', calc_views.add, name='add'),
    url(r'^add/(\d+)/(\d+)/$', calc_views.add2, name='add2'),
    url(r'^admin/', admin.site.urls),
]
// 在html中
<a href="{% url 'add2' 4 5 %}">link</a>
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
def old_add2_redirect(request, a, b):
    return HttpResponseRedirect(
        reverse('add2', args=(a, b))  # reverse 方法可以匯出地址  具體如下
    )
#>>> reverse('add2', args=(4,5))
# u'/add/4/5/'

名稱空間 namespace

#  project.urls.py
from django.conf.urls import url,include
urlpatterns = [
    url(r'^a/', include('app01.urls', namespace='author-polls')),
    url(r'^b/', include('app01.urls', namespace='publisher-polls')),
]
# app01.urls.py
from django.conf.urls import url
from app01 import views
 
app_name = 'app01'
urlpatterns = [
    url(r'^(?P<pk>\d+)/$', views.detail, name='detail')
]
# app01.views.py
def detail(request, pk):
    print(request.resolver_match)
    return HttpResponse(pk)

以上定義帶名稱空間的url之後,生成url如下

  • v=reverse('author-polls:detail', kwargs={'pk':11})
  • {% url 'author-polls:detail' pk=11 %}

Django 表單模組

  • tempelate裡的表單控制元件的name(html裡) 需要 和 建立的表單類 的 屬性名一致

Form表單的功能

  • 自動生成HTML表單元素
  • 檢查表單資料的合法性
  • 如果驗證錯誤,重新顯示錶單(資料不會重置)
  • 資料型別轉換(字元型別的資料轉換成相應的Python型別)

Form相關的物件包括

  • Widget:用來渲染成HTML元素的工具,如:forms.Textarea對應HTML中的<textarea>標籤
  • Field:Form物件中的一個欄位,如:EmailField表示email欄位,如果這個欄位不是有效的email格式,就會產生錯誤。
  • Form:一系列Field物件的集合,負責驗證和顯示HTML元素
  • Form Media:用來渲染表單的CSS和JavaScript資源。
# 例項化一個Form物件
# 直接繼承Form
from django import forms
class ContactForm(forms.Form):
 subject = forms.CharField(max_length=100,label='主題')
 message = form.CharField(widget=forms.TextArea)
 sender = form.EmailField()
 cc_myself = forms.BooleanField(required=False)
# 在view中使用form
form django.shortcuts import render
form django.http import HttpResponseRedirect
 
def contact(request):
 if request.method=="POST":
  form = ContactForm(request.POST)
  if form.is_valid(): #所有驗證都通過
   #do something處理業務
   return HttpResponseRedirect('/')
 else:
  form = ContactForm()
 return render(request,'contact.html',{'form':form})
// 在html中使用form
<form action='/contact/' method='POST'>
 {% for field in form %}
  <div class = 'fieldWrapper'>
   {{field.label_tag}}:{{field}}
   {{field.errors}}
  </div>
 {% endfor %}
 <div class='fieldWrapper'> <p><input type='submit' value='留言'></p></div>
</form>

處理表單資料

form.is_valid()返回true後,表單資料都被儲存在form.cleaned_data物件中(字典型別,意為經過清洗的資料),而且資料會被自動轉換為Python物件

if form.is_valid():
 subject = form.cleaned_data['subject']
 message = form.cleaned_data['message']
 sender = form.cleaned_data['sender']
 cc_myself = form.cleaned_data['cc_myself']
 
 recipients = ['[email protected]']
 if cc_myself:
  recipients.append(sender)
 
 from django.core.mail import send_mail
 send_mail(subject, message, sender, recipients)
 return HttpResponseRedirect('/thanks/') # Redirect after POST
#  form.save() 的用法
def post_comment(request, post_pk):
    post = get_object_or_404(Post, pk=post_pk)
    if request.method == 'POST':
        # 使用者提交的資料存在 request.POST 中,這是一個類字典物件。
        # 我們利用這些資料構造了 CommentForm 的例項,這樣 Django 的表單就生成了。
        form = CommentForm(request.POST)

        # 當呼叫 form.is_valid() 方法時,Django 自動幫我們檢查表單的資料是否符合格式要求。
        if form.is_valid():
            # 檢查到資料是合法的,呼叫表單的 save 方法儲存資料到資料庫,
            # commit=False 的作用是僅僅利用表單的資料生成 Comment 模型類的例項,但還不儲存評論資料到資料庫。
            comment = form.save(commit=False)

            # 將評論和被評論的文章關聯起來。
            comment.post = post

            # 最終將評論資料儲存進資料庫,呼叫模型例項的 save 方法
            comment.save()

相關推薦

django url逆向解析django form小記

Django URL name詳解 # 在 urls.py檔案中 urlpatterns = [ url(r'^$', calc_views.index, name='home'), url(r'^add/$', calc_views.add, name='add')

django URL反向解析名稱空間

一、反向解析URL 在實際的Django專案中,經常需要獲取某條URL,為生成的內容配置URL連結。 比如,我要在頁面上展示一列文章列表,每個條目都是個超級連結,點選就進入該文章的詳細頁面。 現在我們的urlconf是這麼配置的:^post/(?P<id>\d+)。 在前端中,這就需要為H

Django學習筆記(6)——Form

采集 server spa 點擊事件 checkbox 構建 tor log fields 知識儲備:HTML表單form學習   表單,在前端頁面中屬於最常見的一個東西了。基本上網站信息的提交都用到了表單,所以下面來學習Django中優雅的表單系統:Form   表單

spring boot 自定義引數解析器實現form型別請求或位址列請求引數下劃線轉駝峰屬性

一、定義引數解析註解 @Target(value = ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface ParameterModel { } 二、定義抽象類AbstractCustomiz

php 解決避免form重複提交的方法

在提交表單的時候,可能遇到網速等導致頁面突然載入變慢,使用者重複地點選提交按鈕,將在資料庫產生多條資料,導致不可控情況。 比如下面的情況就會導致表單重複提交: 點選提交按鈕兩次。 點選重新整理按鈕。 使用瀏覽器後退按鈕重複之前的操作,導致重複提交表單。 使用瀏覽器歷史記錄重

Django框架 之 FormAjax上傳文件

不可 _for render ren files AS AD 什麽 OS 瀏覽目錄 Form表單上傳文件 Ajax上傳文件 偽造Ajax上傳文件 Form表單上傳文件 html <h3>form表單上傳文件&

django 基於form上傳檔案基於ajax上傳檔案

一、基於form表單上傳檔案 1、html裡是有一個input type="file" 和 ‘submit’的標籤 2、vies.py def fileupload(request): if request.method == 'POST': print(request.P

django 基於form上傳文件基於ajax上傳文件

.py ons strong code .ajax lin con html $.ajax 一、基於form表單上傳文件 1、html裏是有一個input type="file" 和 ‘submit’的標簽 2、vies.py def fileupload(request

django form驗證

錯誤 mail 定義 lap hide else ren end blog 簡單例子: 1 #自定義驗證類 2 class Check_form1(forms.Form): 3 #user就是要驗證的字段,這裏對應前端name <inp

Django--分頁器(paginator)、Django的用戶認證、DjangoFORM

modelform 從數據 submit fields 個人 select method rtc 無法使用 分頁器(paginator) >>> from django.core.paginator import Paginator >>&g

Django-Djangoform

valid blog pos ges 驗證 錯誤 form表單 技術分享 orm 註冊頁面如果用ajax來做,視圖views裏面判斷會很復雜,需要判斷各種字段,我們用form來做 form_obj,實例化form_post(form_obj)對象,一定要加上(reque

Django-form

gist 第一個 例子 構建 ole 最短 輸入 his 用戶 構建一個表單 假設你想在你的網站上創建一個簡單的表單,以獲得用戶的名字。你需要類似這樣的模板: ? 1 2 3 4 5 <form ac

Django---Form

pat space ipad you except forms 模塊 子類 幫助信息 form組件的特點 數據的重置 校驗規則 程序執行文件, sys.path ,加載當前文件的路徑,到內存中,會執行當前文件。 在當前的sys.path 環境中查找該文件,找不到就會

Django url 標簽reverse()函數的使用(轉)

nth view body alt .com 註意 完全 href def 使用url標簽和reverse()函數,可以避免在模板和view中對url進行硬編碼,這樣即使url改變了,對模板和view也沒有影響, 其實在模板, view中,如果想獲取當前訪問的url,那用r

Django form

max 移除 ipad container led true image 雙色球 clas Form介紹 我們之前在HTML頁面中利用form表單向後端提交數據時,都會寫一些獲取用戶輸入的標簽並且用form標簽把它們包起來。 與此同時我們在好多場景下都需要對用戶的輸入做校

Django中的Form驗證

服務 是否 input req 驗證方法 有著 require DC 通過 回憶一下Form表單驗證的邏輯: 前端有若幹個input輸入框,將用戶輸入內容,以字典傳遞給後端。 後端預先存在一個Form表單驗證的基類,封裝了一個檢測用戶輸入是否全部通過的方法。該方法會先定義好

71、Djangoform

protoc valid init title except Go doc 列表 ima Form介紹 我們之前在HTML頁面中利用form表單向後端提交數據時,都會寫一些獲取用戶輸入的標簽並且用form標簽把它們包起來。 與此同時我們在好多場景下都需要對用戶的輸入做校驗

# Django admin、form的應用記錄

表單 gets 使用 查找 圖片 clas quest ali password 目錄 Django admin、form表單的應用記錄 一 Django admin 1. 使用介紹 form組件使用 1. form的作用 2. form組件生成HTMKL代碼 3. f

Django 中的Form認證

ons ios ive har emp 幫助 field類 含義 ack 一、Form表單 ? 1.1 Form的幾個功能 驗證用戶數據(顯示錯誤信息) 初始化頁面顯示內容 HTML Form提交保留上次提交數據 生成HTML標簽 ? 1.2 創建表單類Form 1.

django form 驗證

nbsp 驗證 bsp com img 表單驗證 png 表單 djang django form 表單驗證