(生鮮專案)18 使用者手機號註冊

2021-10-01 18:56:28 字數 3300 閱讀 2571

第一步: 前期分析

可見, 前端會post過來三個字段, 所以這裡我們應該使用mixins.createmodelmixin

由於我們自定義的userprofile中只有name是必填字段(注意:django自帶的user中username是必填字段), 所以我們可以在serializers.py中使用serializers.modelserializer

code的驗證需要單獨的validate_code()方法

但是有乙個問題, 傳過來的code是我們userprofile中沒有的字段, 怎麼使用modelserializer時將code驗證並過濾掉?  答:先增加乙個code欄位, 然後使用全域性鉤子刪掉code這個字段

注意: 上面這個頁面, vue前端post過來的手機號碼放在username屬性裡的,  所以我們在取手機號碼的時候, 應該用來self.initial_data["username"]取, 然後我們自己將其複製到mobile屬性中去

這裡我們還需要學會自定義錯誤提示資訊error_messages

雖然在傳送驗證碼階段, 已經驗證了手機號碼是否存在,但在這裡由於前端post的是使用者名稱,所以也要對使用者名稱進行去重驗證uniquevalidator,校驗是否已經存在

第二步: 寫**

1.首先寫userserializer, 專門來處理code的驗證, 和username去重的驗證

from rest_framework import

serializers

from django.contrib.auth import

get_user_model

from rest_framework.validators import uniquevalidator #

給username欄位做查重用

user = get_user_model() #

可以獲取資料庫的userprofile表

#驗證碼校驗

class

userregserializer(serializers.modelserializer):

#由於userprofile並沒有code欄位,所以先加進來

code = serializers.charfield(required=true, max_length=4, min_length=4,

#自定義的錯誤提示資訊

error_messages=,

help_text="

驗證碼"

)

#雖然在傳送驗證碼階段, 已經驗證了手機號碼是否存在,但在這裡由於前端post的是使用者名稱,所以也要對使用者名稱進行驗證,校驗是否已經存在

username = serializers.charfield(required=true,allow_blank=false,

validators=[uniquevalidator(queryset=user.objects.all(),message="

使用者已經存在

")])

#區域性鉤子, 只對code進行校驗

defvalidate_code(self, code):

#post過來的資料封裝在self.initial_data裡, 且傳遞過來手機號的key是username

#一定要按時間排序,因為我們只會取最後一條code來驗證

verify_records = verifycode.objects.filter(mobile=self.initial_data["

username

"]).order_by("

add_time")

#如果驗證碼存在

ifverify_records:

#取最新的那一條驗證碼

last_records =verify_records[0]

#驗證碼有效期為5min

five_minute_ago = datetime.now() - timedelta(hours=0, minutes=5, seconds=0)

if five_minute_ago raise serializers.validationerror("

驗證碼過期")

#驗證碼核對

if last_records.code !=code:

raise serializers.validationerror("

驗證碼錯誤")

#如果驗證碼不存在, 則直接報錯

else

:

raise serializers.validationerror("

驗證碼錯誤")

#全域性鉤子, 目的是過濾掉code欄位(code其實只用於驗證,而不用存在userprofile表中)

#attrs是區域性鉤子清洗後的所有欄位的dict

defvalidate(self, attrs):

attrs[

"mobile

"] = attrs["

username"]

del attrs["

code"]

return

attrs

class

meta:

model =user

fields = ("

username

", "

code

", "

mobile

")

然後是views.userviewset

#

使用者註冊邏輯

class

userviewset(createmodelmixin,viewsets.genericviewset):

serializer_class=userregserializer

別忘記配置url

#

使用者註冊介面(包含code驗證,username去重驗證)

router.register(r'

users

', userviewset, basename="

users

")

2. 最後去瀏覽器驗證

---  君子處其實,不處其華;治其內,不治其外張居正----

微信停止服務印度手機號註冊使用者

techweb 7月26日訊息,據 報道,大量印度使用者反應,使用微信時會被強制退出,而且無法再登陸。在賬號被登出時,使用者收到一條來自微信團隊的資訊,寫道 根據印度法律,我們目前不能為您提供微信服務。我們重視每一位使用者,資料安全和隱私對我們來說是最重要的。我們正在與相關部門接觸,希望能夠在未來恢...

Django部落格搭建 使用者註冊3 手機號校驗

本文接上文 請求方法 get url定義 mobiles p1 3 9 d 請求引數 url路徑引數 引數型別 是否必傳 描述mobiles數字是 使用者輸入 手機號校驗的方法與使用者名稱校驗類似,先說一下簡單思路 使用者在前台輸入手機號,然後焦點移出手機輸入框後 js的blur事件 js通過jqu...

生活之 手機號可能註冊的賬號

由於我們的手機號碼會繫結很多東西,所以當我們手機號碼更換後,應該要及時解綁或者換綁各種賬號繫結。下面就列舉各種需要留意的賬號繫結平台 社交類qq 微博人人 豆瓣支付類 支付寶財付通 天貓 京東當當網 蘇寧易購 郵箱qq郵箱 163郵箱 谷歌郵箱 銀行卡工商銀行 招商銀行 建設銀行 郵政儲蓄銀行 農村...