草庐IT

微信小程序云开发 之 登录注册界面 详细教程

安宁# 2023-08-14 原文

文章目录


前言

好久没更新博客了 ,最近做了一个云开发的小程序。过程之中遇到了很多问题,毕竟自己是学后端的。今天也参加了网易实习生的笔试题,感觉平时过于懒散 ,因为以后每天一更,牛客网每日一练,加油!接下来我将给大家分享自己制作小程序的步骤,避免大家踩坑。

源码附在最后

一、前期的准备(很重要)

1.程序的需求

一定要明白程序的需求是什么 ,需要做哪些方面的功能。

2.微信开发者文档

一定要学会看文档,当你是独自完成开发,看官方文档尤其重要,他会帮助你解决你所遇到的80%的问题。
   附官方文档连接:https://developers.weixin.qq.com/miniprogram/dev/framework/

3.数据库的设计

  1. 需求分析
  2. 概念结构设计
  3. 逻辑结构设计
  4. 数据库物理设计
  5. 数据库的实施
  6. 数据库运行与维护
    一个完整的数据库需要完成这几步,这确实很重要,我当时在做程序时,更新了三次数据库结构,就是因为一开始没有把全部的需求理清楚,所以只能一改在改。

在线画图的工具
ProcessOn画图工具: https://www.processon.com
对于css样式
可以参考菜鸟教程:https://www.runoob.com
JavaScrip
可以参考Bootstrap中文文档JavaScript :https://v3.bootcss.com/javascript
颜色参数:
可以参考中国色: http://zhongguose.com

这些在制作小程序时都会有所帮助。
好了前几准备已经完毕,那么接下来打开你的微信开发者工具。

二、小程序设计阶段

1.选择开发方式

如果你是前端人员,你可以使用云开发,这里比较方便,没有太多的后端设计部分,如果你是后端开发人员建议不使用云开发,这样比较锻炼自己,我是出于需求,要快速上线,所以选择了云开发。

2.云开发

第一步:注册微信小程序,获取小程序的 AppID

进入注册界面:https://mp.weixin.qq.com


选择右下方的小程序 --> 前往注册

这里需要准备一个邮箱,一个邮箱只能申请一个小程序AppID,填写相关信息之后,进入个人页面

在完善小程序信息后,选择开发者设置,这里可以看到你的AppID,在项目中需要配置。
接下俩向下找到–>域名服务–>开通云开发–>同意相关文件–>之后你就可以看你的云开发环境ID,也需要在项目中配置。在获取小程序AppID以及云开发环境ID之后。打开微信开发者工具。

第二步、创建小程序项目

  1. 打开微信开发者工具,新建小程序,将获取的AppID填入。
  2. 创建完之后,在点击云开发控制台窗口里的设置图标,在环境变量的标签页找到环境名称和环境 ID。
    并且在开发者工具中打开源代码文件夹 miniprogram 里的 app.js,找到如下代码:
wx.cloud.init({
      // 在env中此填入云开发环境 ID, 环境 ID 可打开云控制台查看
      env: '',
      traceUser: true,
    })
```javascript
  1. 下载 Nodejs
    这里官方文档给的比教详细:https://developers.weixin.qq.com/community/business/doc/000e26815e8de0db1ecae5a035b00d

跟着官方文档把云函数部署完成后,就可以开始页面的编写了

第三、登录界面的设计

1.登录

 登录:在js逻辑层,就需要我们对输入框中的信息和云数据库中 的信息进行匹配,匹配通过才可以进行下一个界面。那么在前端,我们需要用户输入已经存入数据的正确信息。 
 那么获取前端的输入框的数据,将其传递给js层
 在前端,我们需要绑定数据,使用bindinput绑定js层函数,输入时触发
 前端界面代码块:
   <view  class="inpname">
	 <text>姓名:</text>
     <input type="text" maxlength="8" cursor-spacing="180px" placeholder="输入姓名"  model:value="{{name}}" bindinput="inpname" />
   </view>
  <view class="inpnumber">
	  <text>学号:</text>
      <input type="number" maxlength="8" cursor-spacing="180px"   placeholder="输入学号"   model:value="{{number}}"bindinput="inpnumber"/>
 </view>

js层代码块:
将前端获取输入信息传递给js层的data里面

data:{
  name:'',
  number:''
}
 inpname:function(event){
     this.setData({
       name:event.detail.value,
     })
  },
  inpnumber:function(event){
    this.setData({
       number:event.detail.value,
    })
  },
  

然后将调用云数据,将输入的信息this.data.name与数据库的信息循环遍历进行匹配,当匹配成功时,进行下一页面。

注意: 很多同学,可能直接使用event.detail.value将其直接赋值给数据库的字段,这样绕开js层时不可取的。可以去看下框架内容。

2.注册

注册是往数据库里面添加一个新的用户信息,此时,我们不仅需要对输入的信息与数据库信息进行对比,看是否已经存在,当不存在时,直接向数据库添加数据,如果存在,则进行提示已被注册,注册失败。

     const db = wx.cloud.database()
     const _ = db.command     //获取数据库查询及更新指令
    db.collection("云数据库名").where({
     //_openid: app.globalData.openid 
    })
    .field({   //查询后需要显示的字段信息
      uName:true,
      uNumber:true,
      create:true
    }) 
    .get()    //返回查询到的字段信息
    .then(res => {     //与返回的信息进行匹配
       if(res.data.uName == this.data.name){
          console.log('注册失败')
       }
       else if(res.data.uName == this.data.number){
         console.log('注册失败')
       }
       else{    //当信息未必注册时,我们在将前端页面获取的信息加入数据库中
         db.collection("云数据库名").add({
          data:{ 
            uName:this.data.name,         //将获取的数据存入相应字段中
            uNumber:this.data.number,
            create:1
         }, success: (res) => {
              console.log('注册失败')
            },fail: (res) => {
             console.log('注册失败')
           }
        })         
       }           
  }).catch(err => {
       console.log('注册失败')
    })
    }
   }

3.优化

在登录和注册界面需要右提示,且当用户某一项信息未填时,我们需要提示用户填写相应信息:
为此,我们需要在js层定义一个变量;
当获取的姓名为空时,将”姓名为空“赋值给变量,并在前端页面进行显示;
同理,当学号为空,注册成功,注册失败,登录失败等提示信息在不同的条件下赋值给该变量,使其在不同的条件下,在前端显示相应的信息。

代码如下:
定义变量 在data 中定义prompt
前端页面:

	<view >
    <text>{{prompt}}</text>
    </view>

js页面:

if (this.data.name== '') {
    this.setData({
      prompt: '姓名不能为空'
    })
  }
    else if (this.data.number == '') {
    this.setData({
     prompt: '学号不能为空'
    })
  }
   else {
    this.setData({
      prompt: ''
    })

这样对于信息的提方面就比较完善了。

附源码

大家可以自己去尝试,如果有问题欢迎和我交流!

 <view class="frame">
      <view  class="inpname">
				<text>姓名:</text>
        <input type="text" maxlength="8" cursor-spacing="180px" placeholder="输入姓名"  model:value="{{name}}" bindinput="inpname" />
			</view>
			<view class="inpnumber">
				<text>学号:</text>
        <input type="number" maxlength="8" cursor-spacing="180px"   placeholder="输入学号"   model:value="{{number}}"bindinput="inpnumber"/>
      </view>
    </view>
		<view class="error">
    <text>{{prompt}}</text>
    </view>

js页面:

const app = getApp()

Page({
  data:{
    name:'',
    number:'',
    prompt: '',
    avatarUrl: './user-unlogin.png',
    userInfo: {},
    hasUserInfo: false,
    logged: false,
    takeSession: false,
    requestResult: '',
    canIUseGetUserProfile: false,
    canIUseOpenData: wx.canIUse('open-data.type.userAvatarUrl') // 如需尝试获取用户信息可改
  },
  //页面初始化
  onLoad:function(openid){
    this.setData({
      prompt: ''
    })
    wx.login({
      success (res) {
        if (res.code) {
          //发起网络请求
          wx.request({
            url: 'https://test.com/onLogin',
            data: {
              code: res.code
            }
          })
        } else {
          console.log('登录失败!' + res.errMsg)
        }
      }
    })
  },
  inpname:function(event){
     this.setData({
       name:event.detail.value,
     })
  },
  inpnumber:function(event){
    this.setData({
       number:event.detail.value,
    })
  },
  //登录
 login:function(){
   this.setData({
   prompt: ''
   })
     let i=0
    if (this.data.name== '') {
    this.setData({
      prompt: '姓名不能为空'
    })
  }
    else if (this.data.number == '') {
    this.setData({
      prompt: '学号不能为空'
    })
  }
   else {
    this.setData({
      prompt: ''
    })
    const db = wx.cloud.database()
    const _ = db.command     //获取数据库查询及更新指令
    db.collection("云函数名").where({
     
    })
    .field({
      uName:true,
      uNumber:true,
      create:true
    })
    .get()    
    .then(res => {
       for(i=0;i<res.data.length;i++){
         if(this.data.name == res.data[i].uName){
            if(this.data.number == res.data[i].uNumber){
               if(res.data[i].create == 1){
                this.setData({
                  prompt: ''
                 })
                wx.navigateTo({ 
                  url: '../  /' //页面跳转
                })
               }
                else {
                  this.setData({
                    prompt: ''
                   })
                  wx.switchTab({
                    url: '../  /'//跳转到主界面
                  })
                }   
            }else{
              this.setData({
                prompt: '姓名或学号输入错误1'
               })
            }
         }
         else{
           this.setData({
            prompt: '姓名或学号输入错误'
           })
         }
        }
  }).catch(err => {
 
      this.setData({
        prompt:''
      })
    })
  }
  },


// 注册
enroll:function(){
    this.setData({
      prompt: ''
     })
    if (this.data.name == '') {
    this.setData({
      prompt: '姓名不能为空'
    })
  }
    else if (this.data.number == '') {
    this.setData({
      prompt: '学号不能为空'
    })
  }
   else {
    const db = wx.cloud.database()
    const _ = db.command     //获取数据库查询及更新指令
    db.collection("云函数名").where({
     //_openid: app.globalData.openid 
    })
    .field({
      uName:true,
      uNumber:true,
      create:true
    })
    .get()    
    .then(res => {     
       if(res.data.uName == this.data.name){
         this.setData({
          prompt:'姓名已被注册!'
         })
       }
       else if(res.data.uName == this.data.number){
         this.setData({
           prompt:'学号已被注册!'
         })
       }
       else{
         this.setData({
           prompt:''
         })
         db.collection("云函数名").add({
          data:{
            uName:this.data.name,
            uNumber:this.data.number,
            create:1
         }, success: (res) => {
              this.setData({
            prompt: '注册成功,请登录!'
            })
            },fail: (res) => {
             this.setData({
               prompt: '注册失败!'
              })
           }
        })         
       }           
  }).catch(err => {
      this.setData({
        prompt:'注册失败,姓名或学号已被注册3'
      })
    })
    }
   }
})


后续界面持续更新中,毕竟我是后端开发的,哪里写的不对欢迎评论区指点!

有关微信小程序云开发 之 登录注册界面 详细教程的更多相关文章

  1. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  2. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  3. 微信小程序通过字典表匹配对应数据 - 2

    前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立

  4. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  5. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  6. 阿里云国际版免费试用:如何注册以及注意事项 - 2

    作为新的阿里云用户,您可以50免费试用多种优惠,价值高达1,700美元(或8,500美元)。这将让您了解和体验阿里云平台上提供的一系列产品和服务。如果您以个人身份注册免费试用,您将获得价值1,700美元的优惠。但是,如果您是注册公司,您可以选择企业免费试用,提交基本信息通过企业实名注册验证,即可开始价值$8,500的免费试用!本教程介绍了如何设置您的帐户并使用您的免费试用版。​关于免费试用在我们开始此试用之前,您还必须遵守以下条款和条件才能访问您的免费试用:只有在一年内创建的账户才有资格获得阿里云免费试用。通过此免费试用优惠,用户可以免费试用免费试用活动页面上列出的每种产品一次。如果您有多个帐

  7. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

  8. ruby-on-rails - 设计注册确认 - 2

    我在我的项目中有一个用户和一个管理员角色。我使用Devise创建了身份验证。在我的管理员角色中,我没有任何确认。在我的用户模型中,我有以下内容:devise:database_authenticatable,:confirmable,:recoverable,:rememberable,:trackable,:validatable,:timeoutable,:registerable#Setupaccessible(orprotected)attributesforyourmodelattr_accessible:email,:username,:prename,:surname,:

  9. ruby - 在 RUBY 上的 PADRINO 框架上使用 RSPEC 进行测试的教程 - 2

    我是Ruby新手,并被要求在我们的新项目中使用它。我们还被要求使用Padrino(Sinatra)作为后端/框架。我们被要求使用Rspec进行测试。我一直在寻找可以指导在Padrino上使用RspecforRuby的教程。我得到的主要是引用RoR。但是,我需要RubyonPadrino。请在任何入门/指南/引用/讨论等方面指导我。如有不妥之处请指正。可能是我没有针对我的问题搜索正确的词/短语组合。我正在使用Ruby1.9.3和Padrinov.0.10.6。注意:我还提到了SOquestion,但它没有帮助。 最佳答案 我没用过Pa

  10. ruby - 使用 Ruby 和 Mechanize 登录网站 - 2

    我需要从站点抓取数据,但它需要我先登录。我一直在使用hpricot成功地抓取其他网站,但我是使用mechanize的新手,我真的对如何使用它感到困惑。我看到这个例子经常被引用:require'rubygems'require'mechanize'a=Mechanize.newa.get('http://rubyforge.org/')do|page|#Clicktheloginlinklogin_page=a.click(page.link_with(:text=>/LogIn/))#Submittheloginformmy_page=login_page.form_with(:act

随机推荐