国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

django與小程序實現登錄驗證功能的示例代碼

2020-02-16 01:14:21
字體:
來源:轉載
供稿:網友

之前用小程序做項目,因為后臺使用的java開發,一切順利,但切換成django做RESTful API接口時,在登陸注冊時一直出現問題,網上搜索,借助一個網友的回答,找到了一種可行的解決方案,現記錄如下。

具體流程

用戶點擊小程序頁面上的登錄授權認證 通過微信自帶的認證獲取code 調取登錄接口,將code傳入后臺 后臺拿到code調用微信接口獲取openid等用戶信息 后臺將openid作為用戶名,若存在則去校驗用戶信息,否則以此用戶名創建新用戶,密碼隨機生成 將校驗結果或者創建信息返回給微信小程序端 根據返回的信息完成用戶登錄校驗

django的用戶權限認證

django有一套自己的完善用戶模型,由于Django Auth自帶的User模型字段有限,我們需要對其進行拓展(直接使用也可以)

nickname = models.CharField(verbose_name=u'昵稱',max_length=50, blank=True)user_avatar = models.ImageField(verbose_name=u'用戶頭像', upload_to='image/%Y/%m/%d', default=u'image/default.png', max_length=500)user_email = models.EmailField(verbose_name=u'用戶郵箱',max_length=254)user_phone = models.BigIntegerField(verbose_name=u'手機號', null=True,blank=True)user_birthday = models.DateField(verbose_name=u'出生日期', default = timezone.now)user_sex = models.CharField(verbose_name=u'性別',max_length=6,choices=(('male','男'),('female','女')),default='male')user_address = models.CharField(verbose_name=u'地址',max_length=550, blank=True,null=True)signature = models.CharField(verbose_name=u'個性簽名',max_length=550, blank=True,null=True)

用戶接口序列化

from rest_framework import serializersclass UserSerializer(serializers.ModelSerializer):class Meta:  model = User  fields = "__all__"

登陸接口設計

class UserLogin(APIView):  def post(self,request):    params = request.data    userName = get_openid(params.get('code'))    userInfo = params.get('userinfo')    try:      user = User.objects.get(username = userName)    except Exception as e:      user = None    if user:      # 更新用戶信息      user = User.objects.get(username = userName)    else:      #注冊新用戶      user = User.objects.create_user(username=userName,password=random_str(10))      #手動生成JWT    # 手動生成token驗證    jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER    jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER    payload = jwt_payload_handler(user)    token = jwt_encode_handler(payload)    ret = {'code': '00000', 'msg': None,'data':{}}        ret['msg'] = '授權成功'    ret['data'] = {      'token': token,      'user_id': user.id,      'nickname': user.nickname    }    return JsonResponse(ret)

解析code獲取openid

class OpenidUtils(object):  def __init__(self, jscode):    self.url = "https://api.weixin.qq.com/sns/jscode2session"    self.appid = APPID    self.secret = SECRET    self.jscode = jscode  # 前端傳回的動態jscode  def get_openid(self):    url = self.url + "?appid=" + self.appid + "&secret=" + self.secret + "&js_code=" + self.jscode + "&grant_type=authorization_code"    r = requests.get(url)    openid = r.json()['openid']    return openid            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 云和县| 龙山县| 镇康县| 年辖:市辖区| 晋宁县| 娄烦县| 盱眙县| 城固县| 浪卡子县| 吉木萨尔县| 沂源县| 天峨县| 资溪县| 明水县| 毕节市| 丰原市| 黄浦区| 阳信县| 阿克| 闽侯县| 花垣县| 扎囊县| 双鸭山市| 武隆县| 贺州市| 巴塘县| 平山县| 蓬安县| 衡南县| 盐源县| 肥城市| 建平县| 加查县| 齐河县| 皋兰县| 白城市| 荥阳市| 大埔县| 嘉禾县| 伊通| 邳州市|