django+mysql中的get和filter操作
django1.11+python+mysql資料庫
情景:用django框架的網站使用者管理部分,找回密碼應用驗證使用者名稱和郵箱(將郵箱作為類密保的驗證資訊使用)的方法來修改使用者資訊的密碼段資料,即驗證資料庫中:使用者名稱存在且驗證郵箱資訊正確進行密碼修改。而驗證使用者資訊可以使用get,filter操作,如下:
資料庫user表內容:
class user(models.Model):
username = models.CharField(max_length=20)
password = models.CharField(max_length=15)
email = models.EmailField(default= ' [email protected]qq.com')
def __unicode__(self):
return self.username
應用資料庫get操作:
if request.method == "POST":
username = request.POST['username']
email = request.POST['email']
password = request.POST['password']
exist_user =models.user.objects.get(username=username,
email=email)
if exist_user:
exist_user.password=password
exist_user.save()
response = HttpResponseRedirect('/user/')
return response
else:
error = "驗證郵箱資訊錯誤!"
errors = Context({"errors": error})
return render_to_response('erroe.html', errors)
以上程式碼實現的是對驗證使用者名稱和郵箱,如果正確,則修改密碼並儲存返回主頁,錯誤的話顯示提示資訊。然而get操作的返回值是一個物件,如果驗證錯誤在實際執行不會按程式碼報錯而會出現莫名錯誤,故不可行,當然你可以選擇不寫else,這是不建議的,而且你不能保證使用者輸入的使用者名稱和郵箱都是正確的,這樣的話,也不能得到正確的物件,仍會出錯。
應用資料庫filter操作
if request.method == "POST":
username = request.POST['username']
email = request.POST['email']
password = request.POST['password']
exist_user = models.user.objects.filter(username=username)
if exist_user:
exist__mail = models.user.objects.filter(username=username,email=email)
if exist__mail:
exist__mail.update(password = password)
response = HttpResponseRedirect('/user/')
return response
else:
error = "驗證郵箱資訊錯誤!"
errors = Context({"errors": error})
return render_to_response('erroe.html', errors)
else:
error = "使用者名稱不存在!"
errors = Context({"errors": error})
return render_to_response('erroe.html', errors)
else:
response = HttpResponseRedirect('/user/')
return response
以上程式碼分步驗證使用者名稱是否存在,郵箱資訊是否正確,從而進一步進行密碼的修改,在此密碼修改應用update方法後不再使用save儲存,如若粗心使用,將會出現“’QuerySet’ object has no attribute ‘save’ “的錯誤提示,這是因為filter返回的是一個物件集不支援該屬性操作。
當然,django框架內建有豐富的使用者管理模組,可實現豐富的使用者管理行為。
相關推薦
django+mysql中的get和filter操作
django1.11+python+mysql資料庫 情景:用django框架的網站使用者管理部分,找回密碼應用驗證使用者名稱和郵箱(將郵箱作為類密保的驗證資訊使用)的方法來修改使用者資訊的密碼段資料,即驗證資料庫中:使用者名稱存在且驗證郵箱資訊正確進行密碼修
Django的orm中get和filter的不同
Django的orm框架對於業務複雜度不是很高的應用來說還是不錯的,寫起來很方面,用起來也簡單。對於新手來說查詢操作中最長用的兩個方法get和filter有時候一不注意就會犯下一些小錯誤。那麼今天就來小節下這兩個方法使用上的不同。 我常用的是1.5版本的django,就以此為例來說
django model的get和filter方法的區別
django的get和filter方法是django model常用到的,搞清楚兩者的區別非常重要。 為了說明它們兩者的區別定義2個models class Student(models.Model): name = models.CharField('
Django 對比get和filter區別
get python django filter get只能取出一條數據,如果滿足條件的數據有多條,拋出異常沒有數據,也會拋出異常filter如果有數據,就返回QuerySet(類似於可以遍歷的數組) 如果沒有數據,返回empty(不會拋異常)本文出自 “13261842” 博客,請務必保留此
python之django的objects.get和objects.filter方法
default 說明 內容 [] obj 形式 get() _id 關聯表 為了說明它們兩者的區別定義2個models class Student(models.Model): name = models.CharField(‘姓名‘, max_length=20, de
Hibernate中get()和load()的區別
factory all htm on() 被調用 容易 transacti rip con Hibernate中根據Id單條查詢獲取對象的方式有兩種,分別是get()和load(),來看一下這兩種方式的區別。 1. get() 使用get()來根據ID進行單條查詢:
mysql中replicate_wild_do_table和replicate_do_db區別
lan rep cati mil 多人 pan think lte 避免 使用replicate_do_db和replicate_ignore_db時有一個隱患,跨庫更新時會出錯。 如在Master(主)服務器上設置 replicate_do_db=test(my.conf
PHP中常用的超全局變量 表單中get和post提交方式的區別 session與cookie的區別 GD庫是做什麽用的
屬性 過程 生成報表 用戶訪問 服務器 接收 file pla request PHP中常用的超全局變量 $_GET ----->get傳送方式$_POST ----->post傳送方式$_REQUEST ----->可以接收到get和post兩種方式的值
MySQL中TIMESTAMPDIFF和TIMESTAMPADD函數的用法
用法 int blog 函數 mysq second row logs tail TIMESTAMPDIFF 語法: TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)。 說明: 返回日期或日期時間表達式date
Hibernate中get和load的區別
實體對象 alt 返回 images get .get 技術 log 查詢語句 在Hibernate中我們知道如果要從數據庫中得到一個對象,通常有兩種方式,一種是通過session.get()方法,另一種就是通過session.load()方法,然後其實這兩種方法在獲得
mysql中varchar和char區別(思維導圖整理)
var 但是 系統 mysql 由於 varchar .html nbsp 了解 由於mysql一直是我的弱項(其實各方面我都是很弱的),所以最近在看msyql,正好看到varchar和char區別,所以整理一下,便於以後遺忘。 0.0圖片已經說明一切,但是系
mysql中LOCATE和CASE WHEN...THEN...ELSE...END結合用法
else case put asdf span 項目 oos bstr col 之前項目中需要寫一個sql,就是查出某個調研詳情中,選A答案,B答案,C答案...F答案的人各有多少人,這個sql也是費了很大的力氣才寫出來,故記下來,方便以後使用。 其中tbl_researc
Mysql中對table的操作問題
creat bsp mysql 訂單 記錄 一行 插入 2016年 lena 今天利用一個mysql問題來對前期學習Mysql操作的一個小小的檢驗!!現在總結一下Mysql中對表格的建立、插入特定的數據、以及查詢滿足某一段條件的數據等等進行操作。 首先需要建立如下三個表(t
http協議中get和post的區別
httpHttp定義了與服務器交互的不同方法,最基本的方法有4種,分別是GET,POST,PUT,DELETEURL全稱是資源描述符,我們可以這樣認 為:一個URL地址,它用於描述一個網絡上的資源,而HTTP中的GET,POST,PUT,DELETE就對應著對這個資源的查 ,改 ,增 ,刪 4個操作。到這裏,
mysql 中delete和trncate區別
重新 sql delet use 它的 刪除 掃描 進行 from mysql中刪除表記錄delete from和truncate table的用法區別: MySQL中有兩種刪除表中記錄的方法:(1)delete from語句,(2)truncate table語句。 d
mysql中字符集和排序規則說明
存儲 blog character 語言 general utf 比較 說明 target 數據庫需要適應各種語言和字符就需要支持不同的字符集(Character Set),每種字符集也有各自的排序規則(Collation)。 一.字符集 字符集,即用於定義字
mysql中concat 和 group_concat()的用法
sub concat order by 返回 int 連接 插入 sep 結果 一、CONCAT()函數CONCAT()函數用於將多個字符串連接成一個字符串。使用數據表Info作為示例,其中SELECT id,name FROM info LIMIT 1;的返回結果為+--
Mysql中datetime和timestamp區別
sta mysql -m 時區 日期 timestamp 適應 tex 區別 DATETIME日期和時間的組合。支持的範圍是‘1000-01-01 00:00:00‘到‘9999-12-31 23:59:59‘。MySQL以‘YYYY-MM-DD HH:MM:SS‘格式顯示
mysql中now和sysdate的區別
mysql now和sysdatemysql 中now獲取的是sql執行的時間,sysdate獲取的是系統時間在master 和slave 主從過程中會導致時間的不一致導致報錯例如:Unsafe statement written to the binary log using statement form
form表單中get和post兩種提交方式的區別
name bsp inpu get div post input 普通 表單 一、form表單中get和post兩種提交方式的區別? 1.get提交表單中的內容在鏈接處是可見的。post不可見 2.post相比於get是安全的 3.post不收限制大小,get有