vue和java实现页面增删改_SpringBoot-Vue实现增删改查及分页小DEMO

前言

主要通过后端 Spring Boot 技术和前端 Vue 技术来简单开发一个demo,实现增删改查、分页功能以及了解Springboot搭配vue完成前后端分离项目的开发流程。

开发栈

前端

开发工具:WebStorm

开发框架:vue + axios

包管理工具: npm

打包工具:webpack

后端

开发工具:IDEA

开发框架:Springboot + mybatis

打包工具:maven

数据库: MySQL

PS:假设以上的的工具你都安装好啦,写CRUD小DEMO时进坑了,这篇blog参考一下,仅供参考,仅供参考😤,,如有不足请不吝赐教。

后端开发环境搭建

1、File->New->Project...

075746f65b40c6b35522a4858c2fd1c1.png

2、选择 Spring Initializr ,然后选择默认的 url 点击next

c75a2879bd269aa1ca8a0c2d80deab97.png

3、勾选Spring Web、SQL模板,next

a73ef793a20e2a53c2c5ad607b6b5829.png

4、点击finish,搭建完成

2e2fef12dcb3d2ae482196fed8036540.png

后端开发过程

1、更新pom.xml如下:

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.example

demo

0.0.1-SNAPSHOT

springboot-mybatis

org.springframework.boot

spring-boot-starter-parent

2.1.3.RELEASE

1.2.0

5.1.39

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-test

test

org.mybatis.spring.boot

mybatis-spring-boot-starter

${mybatis-spring-boot}

mysql

mysql-connector-java

${mysql-connector}

junit

junit

4.12

2、新建 demo\src\main\java\com\example\demo\entity\User.java

package com.example.demo.entity;

public class User {

private int userId;

private String userDate;

private String userName;

private String userAddress;

//省略get() and set()

}

3、更新demo\src\main\resources\application.properties

## 数据源配置

spring.datasource.url=jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf8

spring.datasource.username=root

spring.datasource.password=123

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

## Mybatis 配置

mybatis.typeAliasesPackage=org.spring.springboot.domain

mybatis.mapperLocations=classpath:mapper/*.xml

## 端口

server.port=8081

4、新建demo\src\main\java\com\example\demo\mapper\UserMapper.java

package com.example.demo.mapper;

import com.example.demo.entity.User;

import org.apache.ibatis.annotations.Mapper;

import java.util.List;

Mapper

public interface UserMapper {

public List findUserByName(String userName);

public List ListUser();

public List queryPage(Integer startRows);

public int getRowCount();

public int insertUser(User user);

public int delete(int userId);

public int Update(User user);

}

5、新建demo\src\main\resources\mapper\UserMapper.xml

/p>

"-//mybatis.org//DTD com.example.Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

SELECT * FROM user

SELECT * FROM user

where userName like concat(concat('%',#{userName}),'%')

order by userId desc

select * from user

order by userId desc

limit #{startRows},5

select count(*) from user

INSERT INTO user

(

userId,userDate,userName,userAddress

)

VALUES (

#{userId},

#{userDate, jdbcType=VARCHAR},

#{userName, jdbcType=VARCHAR},

#{userAddress, jdbcType=VARCHAR}

)

delete from user where userId=#{userId}

update user

set user.userDate=#{userDate},user.userName=#{userName},user.userAddress=#{userAddress}

where user.userId=#{userId}

6、新建demo\src\main\java\com\example\demo\service\UserService.java

package com.example.demo.service;

import com.example.demo.entity.User;

import com.example.demo.mapper.UserMapper;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import java.util.List;

Service

public class UserService {

@Autowired

private UserMapper userMapper;

public List findByName(String userName) {

return userMapper.findUserByName(userName);

}

public List queryPage(Integer startRows) {

return userMapper.queryPage(startRows);

}

public int getRowCount() {

return userMapper.getRowCount();

}

public User insertUser(User user) {

userMapper.insertUser(user);

return user;

}

public List ListUser(){

return userMapper.ListUser();

}

public int Update(User user){

return userMapper.Update(user);

}

public int delete(int userId){

return userMapper.delete(userId);

}

}

7、新建demo\src\main\java\com\example\demo\controller\UserCtrl.java

package com.example.demo.controller;

import com.example.demo.entity.User;

import com.example.demo.service.UserService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.*;

import java.util.List;

RestController

public class UserCtrl {

@Autowired

private UserService userService;

@RequestMapping(value = "/delete", method = RequestMethod.POST)

public Integer delete(Integer userId) {

System.out.println(userId);

int result = userService.delete(userId);

return result;

}

@RequestMapping(value = "/update", method = RequestMethod.POST)

@ResponseBody

public String update(User user) {

int result = userService.Update(user);

if (result >= 1) {

return "修改成功";

} else {

return "修改失败";

}

}

@RequestMapping(value = "/insert", method = RequestMethod.POST)

public User insert(User user) {

return userService.insertUser(user);

}

@RequestMapping("/ListUser")

@ResponseBody

public List ListUser() {

return userService.ListUser();

}

@RequestMapping("/ListByName")

@ResponseBody

public List ListUserByName(String userName) {

return userService.findByName(userName);

}

/**

* 分页

* @return

*/

@RequestMapping(value="/page")

@ResponseBody

public List page(Integer page){

int pageNow = page == null ? 1 : page;

int pageSize = 5;

int startRows = pageSize*(pageNow-1);

List list = userService.queryPage(startRows);

return list;

}

/**

* rows

* @return

*/

@RequestMapping(value="/rows")

@ResponseBody

public int rows(){

return userService.getRowCount();

}

}

8、启动MySQL数据库,新建或执行如下表:

55bc20ba371bcc8ffca5d3d33b083be7.png

SET NAMES utf8mb4;

SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------

-- Table structure for user

-- ----------------------------

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (

`userId` int(20) NOT NULL AUTO_INCREMENT,

`userDate` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,

`userName` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,

`userAddress` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,

PRIMARY KEY (`userId`) USING BTREE

) ENGINE = InnoDB AUTO_INCREMENT = 71 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

-- ----------------------------

-- Records of user

-- ----------------------------

INSERT INTO `user` VALUES (15, '2019-09-29T03:17:12.000Z', '王老三', '上海市普陀区金沙江路 1515 弄');

INSERT INTO `user` VALUES (16, '2019-09-29T03:27:05.000Z', '张小四', '上海市普陀区金沙江路 1514 弄');

INSERT INTO `user` VALUES (17, '2019-09-29T03:30:04.000Z', '王老五', '上海市普陀区金沙江路 1513弄');

INSERT INTO `user` VALUES (18, '2019-09-29T03:33:15.000Z', '小六子', '上海市普陀区金沙江路 1512弄');

INSERT INTO `user` VALUES (20, '2019-09-29T03:33:15.000Z', '王老八', '上海市普陀区金沙江路 1512弄');

INSERT INTO `user` VALUES (21, '2019-09-29T05:42:52.000Z', '王大拿', '上海市普陀区金沙江路 1511弄');

INSERT INTO `user` VALUES (22, '2019-09-29T05:43:50.000Z', '小九九', '上海市普陀区金沙江路 1510弄');

INSERT INTO `user` VALUES (23, '2019-09-29T05:43:50.000Z', '刘诗诗', '上海市普陀区金沙江路 1499弄');

INSERT INTO `user` VALUES (24, '2019-09-29T05:46:07.000Z', '扎昂四四', '上海市大湾区科技路');

INSERT INTO `user` VALUES (25, '2019-09-29T05:46:07.000Z', '扎昂四四新东方', '上海市大湾区科技路2001号');

INSERT INTO `user` VALUES (26, '2019-09-29T05:46:07.000Z', '王小虎', '上海市大湾区科技路2002号');

INSERT INTO `user` VALUES (27, '2019-09-29T05:46:07.000Z', '抽拉吧唧', '上海市大湾区科技路2003号');

INSERT INTO `user` VALUES (28, '2019-09-29T05:46:07.000Z', '年啦编辑', '上海市大湾区科技路2004号');

INSERT INTO `user` VALUES (29, '2019-09-29T05:46:07.000Z', '你多少', '上海市普陀区金沙江路 1211弄');

INSERT INTO `user` VALUES (30, '2019-09-29T05:46:07.000Z', '反发达', '上海市普陀区金沙江路 1212弄');

INSERT INTO `user` VALUES (31, '2019-09-29T05:51:20.000Z', '发官方', '上海市普陀区金沙江路 1213弄');

INSERT INTO `user` VALUES (32, '2019-09-29T05:51:20.000Z', '方还有', '上海市普陀区金沙江路 1214弄');

INSERT INTO `user` VALUES (33, '2019-09-29T05:51:20.000Z', '过不分', '上海市普陀区金沙江路 1498弄');

INSERT INTO `user` VALUES (34, '2019-09-29T05:51:20.000Z', '菜市场', '上海市普陀区金沙江路 1497弄');

INSERT INTO `user` VALUES (35, '2019-09-29T05:51:20.000Z', '权威的', '上海市普陀区金沙江路 1496弄');

INSERT INTO `user` VALUES (36, '2019-09-29T05:55:09.000Z', '冈反对的', '上海市大湾区科技路2001号');

INSERT INTO `user` VALUES (37, '2019-09-29T05:55:09.000Z', '冈反对', '上海市大湾区科技路2003号');

INSERT INTO `user` VALUES (38, '2019-09-29T05:55:09.000Z', '偶哦里面', '上海市大湾区科技路2004号');

INSERT INTO `user` VALUES (39, '2019-09-29T05:55:09.000Z', '偶哦韩大苏打', '上海市大湾区科技路2005号');

INSERT INTO `user` VALUES (40, '2019-09-29T05:55:09.000Z', '偶哦匀', '上海市大湾区科技路2006号');

INSERT INTO `user` VALUES (41, '2019-09-29T05:55:09.000Z', '敢哦匀', '上海市大湾区科技路2006号');

INSERT INTO `user` VALUES (42, '2019-09-29T05:55:09.000Z', '敢孩', '上海市大湾区科技路2006号');

INSERT INTO `user` VALUES (43, '2019-09-29T05:55:09.000Z', '敢女孩', '上海市大湾区科技路2007号');

INSERT INTO `user` VALUES (45, '2019-09-29T05:55:09.000Z', '工行行', '上海市大湾区科技路2008号');

INSERT INTO `user` VALUES (46, '2019-09-29T05:55:09.000Z', '家好吗', '上海市大湾区科技路2008号');

INSERT INTO `user` VALUES (47, '2019-09-29T05:55:09.000Z', '的程度', '上海市大湾区科技路2009号');

INSERT INTO `user` VALUES (48, '2019-09-29T05:55:09.000Z', '称得上', '上海市大湾区科技路2009号');

INSERT INTO `user` VALUES (49, '2019-09-29T05:55:09.000Z', '韩国和', '上海市大湾区科技路2010号');

INSERT INTO `user` VALUES (50, '2019-09-29T05:55:09.000Z', '韩好', '上海市大湾区科技路2010号');

INSERT INTO `user` VALUES (51, '2019-09-29T05:55:09.000Z', '韩吧', '上海市大湾区科技路2011号');

INSERT INTO `user` VALUES (52, '2019-09-29T05:55:09.000Z', '韩吧吧', '上海市大湾区科技路2012号');

INSERT INTO `user` VALUES (53, '2019-09-29T05:55:09.000Z', '长度是', '上海市大湾区科技路2013号');

INSERT INTO `user` VALUES (54, '2019-09-29T05:55:09.000Z', '比如合', '上海市大湾区科技路2014号');

INSERT INTO `user` VALUES (55, '2019-09-29T05:55:09.000Z', '如合境', '上海市大湾区科技路2015号');

INSERT INTO `user` VALUES (56, '2019-09-29T05:55:09.000Z', '如合国', '上海市大湾区科技路2016号');

INSERT INTO `user` VALUES (57, '2019-09-29T05:55:09.000Z', '如更好', '上海市大湾区科技路2017号');

INSERT INTO `user` VALUES (58, '2019-09-29T05:55:09.000Z', '如更法', '上海市大湾区科技路2018号');

INSERT INTO `user` VALUES (59, '2019-09-29T05:55:09.000Z', '反对', '上海市大湾区科技路2019号');

INSERT INTO `user` VALUES (60, '2019-09-29T05:55:09.000Z', '如国部', '上海市大湾区科技路2019号');

INSERT INTO `user` VALUES (61, '2019-09-29T06:04:15.000Z', '奇热网', '上海市普陀区金沙江路 1496弄');

INSERT INTO `user` VALUES (62, '2019-09-29T06:04:33.000Z', '反对法', '上海市普陀区金沙江路 1495弄');

INSERT INTO `user` VALUES (63, '2019-09-29T06:04:33.000Z', '的风格', '上海市普陀区金沙江路 1494弄');

INSERT INTO `user` VALUES (64, '2019-09-29T06:04:33.000Z', '广泛同', '上海市大湾区科技路2020号');

INSERT INTO `user` VALUES (65, '2019-09-10T06:04:33.000Z', '但仍然', '上海市普陀区金沙江路 1493弄');

INSERT INTO `user` VALUES (66, '2019-09-29T06:10:28.000Z', 'vdfv', '放到电饭锅的');

INSERT INTO `user` VALUES (67, '2019-09-14T16:00:00.000Z', '朱老六', '上海市高新区上海中心');

INSERT INTO `user` VALUES (69, '2019-09-10T16:00:00.000Z', '是的', ' 学生的三十四分');

INSERT INTO `user` VALUES (70, '2019-09-29T07:51:44.000Z', '张小子', '上海市浦东区1234号');

SET FOREIGN_KEY_CHECKS = 1;

9、后端就写完了,整体结构如下:

68d2e64eb94c9a0cb724e80abb8e50e6.png

10、run 'DemoApplication'启动项目,控制台没报错就用浏览器测试一下,在浏览器中输入http://localhost:8081/page?page=3 如果能出现如下字符串就👌,已安装postman的可以每个方法都试一下:

5ee769ab1d1aad0f02a555a04bf9f631.png

前端开发环境搭建

1、win+R->cmd->进入项目目录依次执行命令:vue init webpack projectName、cd projectName、npm install、npm run dev如图所示:

e101a697f440ac893539811e859820da.png

2、打开浏览器输入:http://localhost:8080,效果如图:

45078d748ba31f91fdc6827c47298ab4.png

3、用WebStorm打开项目:File->Open...->vue01(projectName)

86368e73cf98ef5037e6206aaabca9eb.png

4、Vue-cli项目结构如图:

e08bf080559473d9fb4c9acda53d2987.png

前端开发过程

1、在项目根目录安装axios执行命令npm install axios,安装element ui 执行命令npm i element-ui -S

2、更新vue01\src\App.vue

export default {

name: 'App',

data() {

return {

}

},

methods: {

}

}

#app {

font-family: 'Avenir', Helvetica, Arial, sans-serif;

-webkit-font-smoothing: antialiased;

-moz-osx-font-smoothing: grayscale;

margin: 0px;

padding: 0px;

}

3、更新vue01\src\main.js

// The Vue build version to load with the `import` command

// (runtime-only or standalone) has been set in webpack.base.conf with an alias.

import Vue from 'vue'

import App from './App'

import router from './router'

import elementUI from 'element-ui'

import 'element-ui/lib/theme-chalk/index.css'

import 'element-ui/lib/theme-chalk/display.css'

Vue.use(elementUI)

import axios from 'axios'

Vue.prototype.axios = axios

import qs from 'qs';

Vue.prototype.qs = qs;

Vue.config.productionTip = false

/* eslint-disable no-new */

new Vue({

el: '#app',

router,

components: { App },

template: ''

})

4、更新vue01\src\components\HelloWorld.vue

v-model="search"

class="search_name"

size="mini"

placeholder="输入姓名查询">

type="text"

@click="onSearch()"

class="el-icon-search">查询

class="el-icon-refresh"

type="text"

@click="refreshData">刷新

class="el-icon-circle-plus-outline"

type="text"

@click="dialogVisible = true">添加

:data="tableData"

highlight-current-row

border

style="width: 100%">

label="编号">

{{ scope.row.userId }}

label="日期">

{{ scope.row.userDate }}

label="姓名">

姓名: {{ scope.row.userName }}

住址: {{ scope.row.userAddress }}

日期:{{ scope.row.userDate }}

{{ scope.row.userName }}

label="住址">

{{ scope.row.userAddress }}

label="操作"

fixed="right"

width="200">

size="mini"

icon="el-icon-edit"

@click="handleEdit(scope.$index, scope.row)">编辑

size="mini"

type="danger"

icon="el-icon-delete"

@click="handleDelete(scope.$index, scope.row)">删除

title="添加"

:append-to-body='true'

:visible.sync="dialogVisible"

width="80%"

:before-close="handleClose">

取 消

确 定

title="编辑"

:append-to-body='true'

:visible.sync="dialogUpdate"

width="80%"

:before-close="handleClose">

取 消

确 定

background

:disabled = "disablePage"

:current-page.sync="currentPage"

small

layout="prev, pager, next"

:page-size="pageSize"

:total="total"

@current-change="handleCurrentChange">

export default {

data() {

return {

ruleForm: {

userId: '',

userName: '',

userDate: '',

userAddress: ''

},

rules: {

userName: [

{ required: true, message: '请输入姓名', trigger: 'blur' },

{ min: 2, max: 7, message: '长度在 2 到 7 个字符', trigger: 'blur' }

],

userAddress: [

{ required: true, message: '请输入住址', trigger: 'blur' },

{ min: 5, message: '长度大于 5 个字符', trigger: 'blur' }

],

},

tableData: [],

search: '',

dialogVisible: false,

dialogUpdate: false,

pageSize: 5,

currentPage: 1,

total: 0,

disablePage: false

}

},

methods: {

handleEdit(index, row) {

this.dialogUpdate = true;

this.ruleForm = Object.assign({}, row); //这句是关键!!!

},

handleDelete(index, row) {

console.log(index, row);

this.$confirm('删除操作, 是否继续?', '提示', {

confirmButtonText: '确定',

cancelButtonText: '取消',

type: 'warning'

}).then(() => {

let postData = this.qs.stringify({

userId: row.userId,

});

this.axios({

method: 'post',

url:'/delete',

data:postData

}).then(response =>

{

this.getPages();

this.currentPage = 1;

this.axios.post('/page').then(response =>

{

this.tableData = response.data;

}).catch(error =>

{

console.log(error);

});

this.$message({

type: 'success',

message: '删除成功!'

});

console.log(response);

}).catch(error =>

{

console.log(error);

});

}).catch(() => {

this.$message({

type: 'info',

message: '已取消删除'

});

});

},

handleClose(done) {

this.$confirm('确认关闭?')

.then(_ => {

done();

})

.catch(_ => {});

},

handleCurrentChange() {

console.log(`当前页: ${this.currentPage}`);

let postData = this.qs.stringify({

page: this.currentPage

});

this.axios({

method: 'post',

url:'/page',

data:postData

}).then(response =>

{

this.tableData = response.data;

}).catch(error =>

{

console.log(error);

});

},

cancel() {

this.dialogUpdate = false;

this.dialogVisible = false;

this.emptyUserData();

},

emptyUserData(){

this.ruleForm = {

userName: '',

userDate: '',

userAddress: ''

}

},

addUser() {

let postData = this.qs.stringify({

userDate: this.ruleForm.userDate,

userName: this.ruleForm.userName,

userAddress: this.ruleForm.userAddress

});

this.axios({

method: 'post',

url:'/insert',

data:postData

}).then(response =>

{

this.axios.post('/page').then(response =>

{

this.tableData = response.data;

this.currentPage = 1;

this.$message({

type: 'success',

message: '已添加!'

});

}).catch(error =>

{

console.log(error);

});

this.getPages();

this.dialogVisible = false

console.log(response);

}).catch(error =>

{

console.log(error);

});

},

updateUser() {

let postData = this.qs.stringify({

userId: this.ruleForm.userId,

userDate: this.ruleForm.userDate,

userName: this.ruleForm.userName,

userAddress: this.ruleForm.userAddress

});

this.axios({

method: 'post',

url:'/update',

data:postData

}).then(response =>

{

this.handleCurrentChange();

this.cancel();

this.$message({

type: 'success',

message: '更新成功!'

});

console.log(response);

}).catch(error =>

{

this.$message({

type: 'success',

message: '更新失败!'

});

console.log(error);

});

},

onSearch() {

let postData = this.qs.stringify({

userName: this.search

});

this.axios({

method: 'post',

url: '/ListByName',

data: postData

}).then(response =>

{

this.tableData = response.data;

this.disablePage = true;

}).catch(error =>

{

console.log(error);

});

},

getPages() {

this.axios.post('/rows').then(response =>

{

this.total = response.data;

}).catch(error =>

{

console.log(error);

});

},

refreshData() {

location.reload();

}

},

created() {

/*this.axios.get('static/user.json').then(response =>

{

this.tableData = response.data.tableData;

this.total = response.data.tableData.length;

// console.log(JSON.parse(JSON.stringify(response.data))['tableData'])

});*/

this.axios.post('/page').then(response =>

{

this.tableData = response.data;

}).catch(error =>

{

console.log(error);

});

this.axios.post('/rows').then(response =>

{

this.total = response.data;

}).catch(error =>

{

console.log(error);

});

},

}

.search_name{

width: 200px;

}

.pages{

margin: 0px;

padding: 0px;

text-align: right;

}

前后端整合

方式一:

在vue01\config\index.js文件中配置proxyTable{},如下:

proxyTable: {

'/': {

target:'http://localhost:8081', // 你请求的第三方接口

changeOrigin:true, // 在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题

pathRewrite:{ // 路径重写,

'^/': '' // 替换target中的请求地址

}

}

},

方式二:

在vue-cli项目根目录执行命令npm run build,编译完成后将dist/static文件夹copy至springboot项目的src/main/resources/static目录下然后直接启动springboot项目就OK了。

实现效果

6e7cbaa824af1303274224cacfd8278f.png

b2c69fecaedf3193f27c47cf2eff6b28.png

6075abfa0ca44e01e8ddd6a6b88ed621.png

8c1b6ae6a043c40e0ebbbb5ebe28e60f.png

3064d9884a4ae76fe2bef47c1359bdea.png

2e54dd8a5a89e0f96ff24573904aa31c.png

ad65934359ecf2b3138e916ed6944714.png

758ecbac1446976be5baae443632f627.gif

总结

大材小用,✍这篇博客の源码在我的GitHub上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502542.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读取24位ad的值_实践案例丨利用小熊派开发板获取土壤湿度传感器的ADC值

摘要:一文带你用小熊派开发板动手做土壤湿度传感器。一、实验准备1.实验环境一块stm32开发板(推荐使用小熊派),以及数据线已经安装STM32CubeMX已经安装KeilMDK,并导入stm32开发板对应的芯片包(小熊派使用的是STM32L431…

java 计算两个时间戳_Java时间戳计算重叠持续时间与间隔

我相信下面的方法给出了你的Joda时间解的等价物。private static final LocalTime START LocalTime.of(18, 0);private static final LocalTime END LocalTime.of(8, 0);public static Duration overlap(ZonedDateTime currentStart, ZonedDateTime currentEnd) {ZonedDateTi…

python ini文件删除修改_如何在INI文件中编写时删除空格 - Python

这是RawConfigParser.write的定义:def write(self, fp):"""Write an .ini-format representation of the configuration state."""if self._defaults:fp.write("[%s]\n" % DEFAULTSECT)for (key, value) in self._defaults…

php 如何守护进程_PHP 如何实现守护进程

PHP 如何实现守护进程发布时间:2020-07-11 15:29:31来源:亿速云阅读:58作者:LeahPHP 如何实现守护进程?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小…

python requests session刷新_Python Requests Session set-cookie不生效的坑

我们知道 Python Requests库 中的 Session 模块有连接池和会话管理的功能,比如请求一个登录接口后,会自动处理 response 中的 set-cookie,下次再请求时会自动把 cookie 带上。但最近出现了一个诡异的事情,cookie 没有自动带上&…

php redis与me m,Redis(十) —— 为php增加redis扩展

chenchen-ubuntu:~/download$ ls | grep phpredisphpredis-master.zip# 解压缩chenchen-ubuntu:~/download$ unzip phpredis-master.zip# 进入安装目录chenchen-ubuntu:~/download$ cd phpredis-master/chenchen-ubuntu:~/download/phpredis-master$ lsarrays.markdown debian …

php查询变量类型,php判断变量类型常用方法

php 判断变量类型常用的函数主要有下列几个:gettype()、is_array()、is_bool()、is_float()、is_double()、is_integer()、is_null()、is_numeric()、is_object()、is_resource()、is_scalar() 和 is_string()现在让我们了解下他们的具体的使用方法gettype() 返回 P…

mac 爱普生打印机驱动_高效打印企业首选 爱普生M2178黑白多功能一体机评测

提到打印机相信每一个公司都配备了一台,因为它是日常办公中不可缺少。尽管现在很多的工作流程都已经可以在线上执行,且提倡无纸化办公,但很多重要的材料还是需要打印出来存档、签字。因此打印机还是一个非常必要的配置。对于一个企业来讲&…

python线程池操作_Python mutiprocessing多线程池pool操作示例

本文实例讲述了Python mutiprocessing多线程池pool操作。分享给大家供大家参考,具体如下:python — mutiprocessing 多线程 pool脚本代码:root72132server:~/python/multiprocess# lsmultiprocess_pool.py multprocess.pyroot72132server:~/p…

php ajax 加载列表,Ajax点击不断加载数据列表(图文教程)

这篇文章主要介绍了Ajax点击不断加载数据列表的相关资料,需要的朋友可以参考下Ajax简介AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。AJAX 异步 JavaScript和XML(标准通用标记语言的子集)。AJAX 是…

python指定进程断网_python通过scapy模块进行arp断网攻击

前言:想实现像arpsoof一样的工具arp断网攻击原理:通过伪造IP地址与MAC地址实现ARP欺骗,在网络发送大量ARP通信量。攻击者只要持续不断发送arp包就能造成中间人攻击或者断网攻击。0x01:准备工作Linux环境下:(windows环境下各种错误&#xff0c…

linux版_微软爱 Linux:安全杀毒软件 Defender ATP 要出 Linux 版了! | Linux 中国

微软宣布将于 2020 年将其企业安全产品 Defender 高级威胁防护(ATP)引入 Linux。-- Abhishek Prakash微软的年度开发者大会 Microsoft Ignite 刚刚结束,会上发布了一些与 Linux 有关的重要公告。你可能已经知道微软将 Edge Web 浏览器引入 Linux,而下一个…

php下载文件与服务器有关吗,php 下载文件功能中下载后文件大小与服务器源文件大小不一致...

1.根据网上下载文件的函数public function putFile($file_dir, $file_name){$file_dir chop($file_dir);//去掉路径中多余的空格//得出要下载的文件的路径if($file_dir ! ){$file_path $file_dir;if(substr($file_dir,strlen($file_dir)-1,strlen($file_dir)) ! /)$file_path…

python哪个文字转语音好用_【python3】Python十行代码搞定文字转语音

都是copy的百度SDK文档,简单说说怎么用。1、没安装Python的参见此文:Python学习笔记系列 1 ——安装调试Python开发软件2、winr输入cmd打开命令行,输入:pip install baidu-aip,如下安装百度AI的模块。3、新建文本文档&…

php正则匹配怎么写,正则表达式 - 求助怎么写php的正则匹配

我要取出 字符串"userasdasd; tokendwwewee; typeassdfs" 里的token值dwwewee,php怎么写?真的不会写。。这样好像也不行preg_match("/(token)(.*?)(;|$)/i","userasdasd; tokendwwewee; typeassdfs", $matches);foreach …

msp430中如何连续对位进行取反_四元数数控:如何保养视觉对位平台?

视觉对位平台由于人工衍生出来的各种问题应运而生,诸如高度要求的良率,生产速度的大幅提升,人员无法达成的精准度等等,对于未来这种高度自动化程度的产业更是不可或缺的产品。视觉对位平台就是一种利用XY向的移动单元加上θ角的微量转向,达到两个工作物体的组合。而且对位平台是…

ic启动器怎么导入模组_5G手机主板专题报告:高阶产能紧俏,5G手机主板升级蛋糕怎么分...

(获取报告请登陆未来智库www.vzkoo.com)一、智能机进入 5G 时代,主板方案望迎阶数跃迁5G 手机主板需求升级或将带来行业高端产能供给偏紧,A 股高端 HDI 供应商望受益。 当前时点手机各个维度的创新升级都对主板技术路线产生影响,芯片 I/O 数增…

element tree不刷新视图_Vue项目布署后,刷新页面404的真正原因找到了

从一篇日记说起我是一个小前端,我有写日记的习惯2020年10月17 天气 晴今天天气不错,心情也跟着好起来了辛辛苦苦加班两个星期终于完成了产品需求,到了要上线的时候了,嘴里也不知不觉哼起了“劳资今晚不加班”的小曲一顿操作猛如虎…

php mate,[树莓派] ubuntu-mate配置nginx + php7.0环境

树莓派3b,系统 ubuntu-mate 16.041、安装 Nginx 和 PHP7sudo apt-get updatesudo apt-get install nginx php7.0-fpm php7.0-cli php7.0-curl php7.0-gd php7.0-mcrypt php7.0-cgi php7.0-sqlite3 php7.0-mysqlsudo service nginx startsudo service php7.0-fpm restart复制代码…

编程加速服务器_FPGA加速驱动新时代的数据洪流,下篇

目 录人工智能计算加速器产品系列的相关布局FPGA开发的痛点与潜在方案结语在《FPGA加速驱动新时代的数据洪流,上篇》中,老石介绍了英特尔应对大数据时代的整体战略布局,特别是基于FPGA的各类智能网卡和网络解决方案。在本篇中,老石…