1. 程式人生 > >django+mysql中的get和filter操作

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+mysqlgetfilter操作

django1.11+python+mysql資料庫 情景:用django框架的網站使用者管理部分,找回密碼應用驗證使用者名稱和郵箱(將郵箱作為類密保的驗證資訊使用)的方法來修改使用者資訊的密碼段資料,即驗證資料庫中:使用者名稱存在且驗證郵箱資訊正確進行密碼修

Django的ormgetfilter的不同

Django的orm框架對於業務複雜度不是很高的應用來說還是不錯的,寫起來很方面,用起來也簡單。對於新手來說查詢操作中最長用的兩個方法get和filter有時候一不注意就會犯下一些小錯誤。那麼今天就來小節下這兩個方法使用上的不同。 我常用的是1.5版本的django,就以此為例來說

django model的getfilter方法的區別

django的get和filter方法是django model常用到的,搞清楚兩者的區別非常重要。 為了說明它們兩者的區別定義2個models class Student(models.Model): name = models.CharField('

Django 對比getfilter區別

get python django filter get只能取出一條數據,如果滿足條件的數據有多條,拋出異常沒有數據,也會拋出異常filter如果有數據,就返回QuerySet(類似於可以遍歷的數組) 如果沒有數據,返回empty(不會拋異常)本文出自 “13261842” 博客,請務必保留此

python之django的objects.getobjects.filter方法

default 說明 內容 [] obj 形式 get() _id 關聯表 為了說明它們兩者的區別定義2個models class Student(models.Model): name = models.CharField(‘姓名‘, max_length=20, de

Hibernateget()load()的區別

factory all htm on() 被調用 容易 transacti rip con Hibernate中根據Id單條查詢獲取對象的方式有兩種,分別是get()和load(),來看一下這兩種方式的區別。 1. get() 使用get()來根據ID進行單條查詢:

mysqlreplicate_wild_do_tablereplicate_do_db區別

lan rep cati mil 多人 pan think lte 避免 使用replicate_do_db和replicate_ignore_db時有一個隱患,跨庫更新時會出錯。 如在Master(主)服務器上設置 replicate_do_db=test(my.conf

PHP常用的超全局變量 表單getpost提交方式的區別 session與cookie的區別 GD庫是做什麽用的

屬性 過程 生成報表 用戶訪問 服務器 接收 file pla request PHP中常用的超全局變量 $_GET ----->get傳送方式$_POST ----->post傳送方式$_REQUEST ----->可以接收到get和post兩種方式的值

MySQLTIMESTAMPDIFFTIMESTAMPADD函數的用法

用法 int blog 函數 mysq second row logs tail TIMESTAMPDIFF 語法: TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)。 說明: 返回日期或日期時間表達式date

Hibernategetload的區別

實體對象 alt 返回 images get .get 技術 log 查詢語句 在Hibernate中我們知道如果要從數據庫中得到一個對象,通常有兩種方式,一種是通過session.get()方法,另一種就是通過session.load()方法,然後其實這兩種方法在獲得

mysqlvarcharchar區別(思維導圖整理)

var 但是 系統 mysql 由於 varchar .html nbsp 了解   由於mysql一直是我的弱項(其實各方面我都是很弱的),所以最近在看msyql,正好看到varchar和char區別,所以整理一下,便於以後遺忘。      0.0圖片已經說明一切,但是系

mysqlLOCATECASE 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協議getpost的區別

httpHttp定義了與服務器交互的不同方法,最基本的方法有4種,分別是GET,POST,PUT,DELETEURL全稱是資源描述符,我們可以這樣認 為:一個URL地址,它用於描述一個網絡上的資源,而HTTP中的GET,POST,PUT,DELETE就對應著對這個資源的查 ,改 ,增 ,刪 4個操作。到這裏,

mysql deletetrncate區別

重新 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)。 一.字符集 字符集,即用於定義字

mysqlconcat group_concat()的用法

sub concat order by 返回 int 連接 插入 sep 結果 一、CONCAT()函數CONCAT()函數用於將多個字符串連接成一個字符串。使用數據表Info作為示例,其中SELECT id,name FROM info LIMIT 1;的返回結果為+--

Mysqldatetimetimestamp區別

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‘格式顯示

mysqlnowsysdate的區別

mysql now和sysdatemysql 中now獲取的是sql執行的時間,sysdate獲取的是系統時間在master 和slave 主從過程中會導致時間的不一致導致報錯例如:Unsafe statement written to the binary log using statement form

form表單getpost兩種提交方式的區別

name bsp inpu get div post input 普通 表單 一、form表單中get和post兩種提交方式的區別?   1.get提交表單中的內容在鏈接處是可見的。post不可見   2.post相比於get是安全的   3.post不收限制大小,get有