zoukankan      html  css  js  c++  java
  • 10.开发newapp的登录功能login

    1.设置是否已经登录的验证

    1.在newapp/pages/center/center.vue中:

    <template>
        <view class="content">
            
        </view>
    </template>
    
    <script>
        export default {
            data() {
                return {
                    
                }
            },
            methods: {
                isLogin(){
                    let token=uni.getStorageSync('token');
                    if(token){
                        console.log('已登录')
                    }else{
                        uni.navigateTo({url:'/pages/login/login'})
                    }
                }
                
            },
            onShow() {
                this.isLogin()
            }
        }
    </script>
    
    <style>
    
    </style>

    2.在newapp/pages/me/me.vue中:

    <template>
        <view>
            
        </view>
    </template>
    
    <script>
        export default {
            data() {
                return {
                    
                }
            },
            methods: {
                isLogin(){
                    let token=uni.getStorageSync('token');
                    if(token){
                        console.log('已登录')
                    }else{
                        uni.navigateTo({url:'/pages/login/login'})
                    }
                }
            },
            onShow() {
                this.isLogin()
            }
        }
    </script>
    
    <style>
    
    </style>

    2.在后端项目中开发小程序用户登录的api

    1.NewCenter/apps/user_operations/views.py:

    from django.shortcuts import render,HttpResponse
    from rest_framework.views import APIView,Response
    from users.models import PianQu,UserProfile
    from users.serializers import PianQuModelSerializer,UserProfileModelSerializer
    from .models import Notice
    from .serializers import NoticeModelSerializer
    import json,time,hashlib
    
    # Create your views here.
    
    
    #……
    
    class UserLoginView(APIView):
        """小程序端用户登录"""
        def post(self, request):
            pwd=request.data.get('pwd')
            tel=request.data.get('tel')
            if pwd and tel:
                user = UserProfile.objects.filter(mobile=tel,password=pwd).first()
                if user:
                    # 生成token
                    now_time=str(int(time.time()))
                    word=user.mobile+now_time
                    token=hashlib.sha256(word.encode("utf-8")).hexdigest()
                    # print(token)
                    user.token=token
                    user.save()
                    re=UserProfileModelSerializer(user)
                    result = {"status": "200", "data":{'info':re.data,'token':token} }
                else:
                    result = {"status": "403", "data": {'msg': '电话或密码错误。'}}
            else:
                result = {"status": "404", "data": {'msg': '未收到足够参数。'}}
            return HttpResponse(json.dumps(result, ensure_ascii=False), content_type="application/json,charset=utf-8")

    2.NewCenter/apps/user_operations/urls.py:

    from django.urls import path
    from .views import GetPianQuBannerView,GetNoticeListView,UserLoginView
    
    urlpatterns = [
        path('getbanner/',GetPianQuBannerView.as_view()),#手机端获取banner图
        path('getnoticeclist/',GetNoticeListView.as_view()),#获取公告列表
        path('userlogin/',UserLoginView.as_view()),#小程序用户登录
    ]

    3.在xadmin后台,输入几个实验用户数据

    (前面填入过)

    3.在uni-app端newapp/pages/login/login.vue中:

    <template>
        
        <view class="content">
            <view class="padding-xl radius shadow-warp bg-white margin-top">
                <view class="cu-form-group">
                    <view class="title">手机:</view>
                    <input placeholder="手机号" v-model="tel"></input>
                </view>
                <view class="cu-form-group">
                    <view class="title">密码:</view>
                    <input placeholder="密码" v-model="pwd"></input>
                </view>
            </view>
            <view class="padding flex flex-direction">
                <button class="cu-btn bg-green margin-tb-sm lg" @tap="goLogin" data-target="Modal">登录</button>
            </view>
            
            
            <view class="cu-modal" :class="modalName=='Modal'?'show':''">
                <view class="cu-dialog">
                    <view class="cu-bar bg-white justify-end">
                        <view class="content">错误提示:</view>
                        <view class="action" @tap="hideModal">
                            <text class="cuIcon-close text-red"></text>
                        </view>
                    </view>
                    <view class="padding-xl">
                        {{title}}
                    </view>
                </view>
            </view>
            
        </view>
            
    
    </template>
    
    <script>
    import {host,get,post} from '@/commons/post_and_get.js';
        export default {
            data() {
                return {
                    modalName: null,
                    title:'请输入正确的手机号和密码',
                    tel:'',
                    pwd:'',
                    
                }
            },
            methods: {
                showModal(e) {
                    this.modalName = e.currentTarget.dataset.target
                },
                hideModal(e) {
                    this.modalName = null
                },
                async goLogin(e){
                    if(this.tel &&this.pwd){
                        if(this.tel.length==11){
                            console.log('提交登录数据')
                            let re=await post('/user_operations/userlogin/',{'tel':this.tel,'pwd':this.pwd})
                            console.log(re)
                            if(re.status==200){
                                console.log('登录成功')
                                uni.setStorageSync('token' , re.data.token);
                                uni.setStorageSync('info' , re.data.info);
                                uni.switchTab({url: '/pages/me/me'});
                            }else{
                                this.title=re.data.msg
                                this.showModal(e)
                            }
                        }else{
                            this.showModal(e)
                        }
                    }else{
                        this.showModal(e)
                    }
                }
                
                
            }
        }
    </script>
    
    <style>
    .content{
        margin-top: 200upx;
    }
    </style>

     运行效果

  • 相关阅读:
    wireshark tcp 协议分析
    Wireshark基本介绍和学习TCP三次握手
    利用百度API(JavaScript 版)实现在地图上绘制任一多边形,并判断给定经纬度是否在多边形范围内。以及两点间的测距功能
    如何从零开始做代码评审
    Git版本控制:Github的使用之 多人协作及参与项目
    如何查看与分析IIS服务器日志?
    解决IIS无响应假死状态
    百度地图上的标注物太多导致界面卡顿的解决办法
    [转]搭建MySQL高可用负载均衡集群
    原型链相关
  • 原文地址:https://www.cnblogs.com/xuepangzi/p/13171271.html
Copyright © 2011-2022 走看看