uniapp访问接⼝先后顺序_uniapp前后端⼩项⽬上⼿完整教程
(详细)
本次学习为hcoder提供的原始教程,本⽂为学习笔记(对部分做了完善和扩展),仅供各位参考!
如若学习,请参见原版教程,⽀持正版,谢谢!
本项⽬为初学者项⽬,功能简单,就不做项⽬演⽰站了,贴上项⽬图⽚:
项⽬建⽴,本次为学习uniapp官⽅教程的学习笔记:
⼀、建⽴项⽬、配置公共登陆函数新建--项⽬--uniapp项⽬--默认模版,进⼊main.js,编写公共登陆函数:fig.productionTip = false
...
Vue.prototype.checkLogin = function(backpage,backtype){ //定义⼀个登陆检查函数
var SUID = StorageSync("SUID"); //从缓存⾥取值
var SRAND = StorageSync("SRAND");
var SNAME = StorageSync("SNAME");
var SFACE = StorageSync("SFACE");
if(SUID == '' || SNAME == '' || SRAND == ''){ //如果没有值,跳转登陆页
console.log("qqw");
return false;
}
return [SUID, SRAND, SNAME, SFACE]; //有值的话,返回值
}
...
App.mpType = 'app'新建页⾯,调⽤公共登陆函数,检查登陆:
内容页⾯
var loginres;
export default {
data() {
return {
}
},
onLoad() {//加载页⾯先判断是否登陆
//console.log(options)
var Loginres = this.checkLogin('../index/index', 2) //调⽤公共的登陆检查函数
console.log(Loginres);
if(!Loginres){return false;} //如果返回值不存在,返回false
},
methods: {
}
}
⼆、服务端代码及配置服务端源码
你可以在⽂末或页⾯右侧的资源包⾥下载本次项⽬的服务端源码,上传⾄服务端,并在index.php配置数据库信息
数据库
你可以使⽤Navicat等数据库⼯具,建⽴新的数据表,并执⾏以下语句,创建表字段:CREATE TABLE `yuedu_members` ( `u_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '⽤户id',
`u_openid` varchar(100) NOT NULL COMMENT 'openid',
`u_name` varchar(50) NOT NULL COMMENT '⽤户昵称',
`u_face` varchar(200) NOT NULL COMMENT '⽤户头像',
`u_random` varchar(30) NOT NULL COMMENT '⽤户随机码',
`u_integral` int(10) DEFAULT '0' COMMENT '积分',
`u_remainder` int(10) DEFAULT '0' COMMENT '余额',
`u_regtime` int(11) NOT NULL COMMENT '⽤户注册时间',
PRIMARY KEY (`u_id`),
UNIQUE KEY `u_openid` (`u_openid`),
UNIQUE KEY `u_id` (`u_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;或者可以⼿敲php端
php原理:
这⾥说⼀下php的运⾏原理 ,看图
php的设计模式
MVC(models、controllers、views)和index.php
C控制器层:对不同的业务
M模型:分为数据模型和业务逻辑模型
V视图:本项⽬因为是前后端分离,不包含V视图层
⽤户⾸先进⼊index.php,进⼊控制器,由控制器进⼊视图层和模型层
控制器调⽤其他静态类:
以下为后端php⽅⾯代码的⼿记在index.php中新建访问规则:index.php⼊⼝⽂件的编写(详细查看注释)<?php
/*
*oldlee
*/
//设置编码
header('content-type:text/html; charset=utf-8');
// 接⼝认证,每次的接⼝访问都带上token,token可以⾃定义
if(empty($_GET['token'])){exit(jsonCode('error', 'token error'));} //如果没有token,结束并token error
if($_GET['token'] != 'api2020'){exit(jsonCode('error', 'token error'));}//如果token不对,结束并token error
//定义常量
// ⽂件夹的定义
define("HS_DS" , DIRECTORY_SEPARATOR);
define("HS_ROOT" , dirname(__FILE__).HS_DS);
define("HS_CONTROLLERS" , HS_ROOT.'controllers'.HS_DS);
define("HS_MODELS" , HS_ROOT.'models'.HS_DS);
define("HS_TOOLS" , HS_ROOT.'tools'.HS_DS);
/* 过滤及定义 POST 减少跨站攻击的可能性*/
if(!empty($_POST)){
define("IS_POST", false);
}else{
define("IS_POST", true);
$_POST = str_replace(array('', '"', "'"),array('<','>', '"', ''), $_POST); //过滤尖括号,引号等
}
// 数据库配置
define('HS_DB_HOST' , '127.0.0.1'); // mysql 服务器地址
define('HS_DB_NAME' , '***'); // 数据库名称
define('HS_DB_USER' , 'root'); // 数据库账号
define('HS_DB_PWD' , '***'); // 数据库密码
define('HS_DB_PRE' , '***'); // 数据表统⼀前缀
define('HS_DB_CHARSET' , 'utf8'); // mysql 字符集类型
// ⼩程序相关设置
define('HS_APPID' , '*****');
mysql下载app
define('HS_SECRET' , '*****');
// ⾃动加载各种控制器、⽅法和类
function hsAutoLoad($className){
$className = explode('\', $className);
if(empty($className[0])){array_shift($className);}
if(count($className) != 2){return false;}
switch($className[0]){
case 'hsModel':
$classFileName = HS_MODELS.$className[1].'.php'; break;
case 'hsTool':
$classFileName = HS_TOOLS.$className[1].'.php';
break;
}
if(empty($classFileName)){return false;}
if(is_file($classFileName)){require $classFileName;}
}
spl_autoload_register("hsAutoLoad");
// 路由解析
$_GET['c'] = empty($_GET['c']) ? 'index' : $_GET['c'];
$_GET['m'] = empty($_GET['m']) ? 'index' : $_GET['m']; $pattern = '/^[a-zA-Z]+[0-9]*[a-zA-Z]*$/';
if(!preg_match($pattern, $_GET['c'])){$_GET['c'] = 'index';}
if(!preg_match($pattern, $_GET['m'])){$_GET['m'] = 'index';} $controllerFileName = HS_CONTROLLERS.$_GET['c'].'.php'; if(is_file($controllerFileName)){
require $controllerFileName;
$className = '\\hsC\'.$_GET['c'];
$controller = new $className;
if(method_exists($controller, $_GET['m'])){
call_user_func(array($controller, $_GET['m']));
}
}
// json 输出
function jsonCode($status, $data){
return json_encode(array('status' => $status, 'data' => $data));
}
/
/ 签名验证
function checkSign(){
if(empty($_POST['sign'])){exit(jsonCode('error', 'sign error'));}
$sign = explode('-', $_POST['sign']);
if(count($sign) != 2){exit(jsonCode('error', 'sign error'));}
$db = \hsTool\db::getInstance('access_tokens');
$token = $db->where('token = ?', array($sign[1]))->fetch();
if(empty($token)){exit(jsonCode('error', 'sign error'));}
$signMd5 = md5($token['token'].$token['time']);
if($signMd5 != $sign[0]){exit(jsonCode('error', 'sign error'));}
// 验证成功则删除
$db->where('token = ?', array($sign[1]))->delete();
}
// 验证⽤户合法性
function checkUser(){
if(empty($_POST['uid'])){exit(jsonCode('error', 'uid error'));}
if(empty($_POST['random'])){exit(jsonCode('error', 'random error'));}
$db = \hsTool\db::getInstance('members');
$user = $db->where('u_id = ?', array($_POST['uid']))->fetch();
if(empty($user)){exit(jsonCode('error', 'user error'));}
if($user['u_random'] != $_POST['random']){exit(jsonCode('error', 'user error'));} return $user;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论