当前位置: 首页 > news >正文

day08-注册功能、前端登录注册页面复制、前端登录功能、前端注册功能

1 注册功能
补充(开放文件夹内)
2 前端登录注册页面复制
4 前端注册功能

1 注册功能

# 分析前端:携带数据格式 {mobile:,code:,password}后端:-1 视图类---》注册方法-2 序列化类---》校验,保存(表中字段多,传的少---》随机,按某种格式生成---》后期修改)

视图类

class UserRegisterView(GenericViewSet, CreateModelMixin):serializer_class = UserRegisterSerializer# @action(methods=['POST'], detail=False)# def register(self, request, *args, **kwargs):#     ser = self.get_serializer(data=request.data)#     ser.is_valid(raise_exception=True)#     ser.save()#     return APIResponse(msg='恭喜您注册成功')# 或者改为@action(methods=['POST'], detail=False)def register(self, request, *args, **kwargs):# 如果是这样做的话,内部执行serializer.data---->会走序列化----》# 基于create返回的user做序列化-----》按照fields = ['mobile', 'code', 'password']做序列化# 但是code不是表中的字段,就会报错,这个时候需要在序列化类中将其反序列化# 即:code = serializers.CharField(max_length=4, min_length=4, write_only=True)res = super().create(request, *args, **kwargs)return APIResponse(msg='恭喜注册成功')

序列化类

class UserRegisterSerializer(serializers.ModelSerializer):# code 不是表中字段code = serializers.CharField(max_length=4, min_length=4, write_only=True)class Meta:model = Userfields = ['mobile', 'code', 'password']def validate(self, attrs):# 1 校验验证码是否正确mobile = attrs.get('mobile')code = attrs.get('code')old_code = cache.get('cache_mobile_%s' % mobile)if code == old_code or code == '8888':  # 测试阶段,万能验证码# 2 组装数据 :username必填,但是没有,code不是表的字段attrs['username'] = mobileattrs.pop('code')# 3 返回return attrsdef create(self, validated_data):  # 密码是加密的,如果重写,密码是明文的  validated_data=mobile,password,usernameuser = User.objects.create_user(**validated_data)return user

补充(开放文件夹内)

#1 为什么要写这个media才能访问-django 默认是不允许前端直接访问项目某个文件夹的-有个static文件夹例外,需要额外配置-如果想让用户访问,必须配置路由,使用serve函数放开path('media/<path:path>', serve, {'document_root': settings.MEDIA_ROOT})-浏览器中访问 meida/icon/1.png--->能把settings.MEDIA_ROOT对应的文件夹下的icon/1.png返回给前端path('lqz/<path:path>', serve, {'document_root':os.path.join(BASE_DIR, 'lqz')})浏览器中访问 lqz/a.txt----->能把项目根路径下lqz对应的文件夹下的a.txt返回给前端# 2 配置文件中 debug作用-开发阶段,都是debug为True,信息显示更丰富-你访问的路由如果不存在,会把所有能访问到的路由都显示出来-程序出了异常,错误信息直接显示在浏览器上-自动重启,只要改了代码,会自动重启-上线阶段,肯定要改成False#3  ALLOWED_HOSTS 的作用-只有debug 为Flase时,这个必须填-限制后端项目(django项目 )能够部署在哪个ip的机器上,写个 *  表示所有地址都可以#4 咱们的项目中,为了知道是在调试模式还是在上线模式,所以才用的debug这个字段-判断,如果是开发阶段,可以有个万能验证码# 5 短信登录或注册接口-app 只需要输入手机号和验证码,如果账号不存在,直接注册成功,并且登录成功,如果账号存在,就是登录-前端传入:{mobiel,code}--->验证验证码是否正确---》拿着mobile去数据库查询,如果能查到,说明它注册过了,直接签发token返回----》如果查不到,没有注册过---》走注册逻辑完成注册---》再签发token,返回给前端-这个接口,随机生成一个6位密码,以短信形式通知用户-这个接口,密码为空,下次他用账号密码登录,不允许登录-后续改密码:user.set_password(new_password)

2 前端登录注册页面测试

登录,注册,都写成组件----》在任意页面中,都能点击显示登录模态框
写好的组件,应该放在那个组件中----》不是页面组件(小组件)
点击登录按钮,把Login.vue 通过定位,占满全屏,透明度设为 0.5 ,纯黑色悲剧,覆盖在组件上
在Login.vue点关闭,要把Login.vue隐藏起来,父子通信之子传父,自定义事件

2.1 Header.vue


<template><div class="header"><div class="slogan"><p>老男孩IT教育 | 帮助有志向的年轻人通过努力学习获得体面的工作和生活</p></div><div class="nav"><ul class="left-part"><li class="logo"><router-link to="/"><img src="../assets/img/head-logo.svg" alt=""></router-link></li><li class="ele"><span @click="goPage('/free-course')" :class="{active: url_path === '/free-course'}">免费课</span></li><li class="ele"><span @click="goPage('/actual-course')" :class="{active: url_path === '/actual-course'}">实战课</span></li><li class="ele"><span @click="goPage('/light-course')" :class="{active: url_path === '/light-course'}">轻课</span></li></ul><div class="right-part"><div><span @click="handleLogin" >登录</span><span class="line">|</span><span>注册</span></div></div><Login v-if="loginShow" @close="handleClose"></Login></div></div></template><script>
import Login from "@/components/Login";export default {name: "Header",data() {return {url_path: sessionStorage.url_path || '/',loginShow: false,}},methods: {goPage(url_path) {// 已经是当前路由就没有必要重新跳转if (this.url_path !== url_path) {this.$router.push(url_path);}sessionStorage.url_path = url_path;},handleLogin(){this.loginShow = true},handleClose(){this.loginShow = false}},created() {sessionStorage.url_path = this.$route.path;this.url_path = this.$route.path;},components: {Login}
}
</script><style scoped>
.header {background-color: white;box-shadow: 0 0 5px 0 #aaa;
}.header:after {content: "";display: block;clear: both;
}.slogan {background-color: #eee;height: 40px;
}.slogan p {width: 1200px;margin: 0 auto;color: #aaa;font-size: 13px;line-height: 40px;
}.nav {background-color: white;user-select: none;width: 1200px;margin: 0 auto;}.nav ul {padding: 15px 0;float: left;
}.nav ul:after {clear: both;content: '';display: block;
}.nav ul li {float: left;
}.logo {margin-right: 20px;
}.ele {margin: 0 20px;
}.ele span {display: block;font: 15px/36px '微软雅黑';border-bottom: 2px solid transparent;cursor: pointer;
}.ele span:hover {border-bottom-color: orange;
}.ele span.active {color: orange;border-bottom-color: orange;
}.right-part {float: right;
}.right-part .line {margin: 0 10px;
}.right-part span {line-height: 68px;cursor: pointer;
}
</style>

2.2 Login.vue

<template><div class="login"><span @click="close">X</span></div>
</template><script>
export default {name: "Login",methods: {close() {this.$emit('close_login')}}}
</script><style scoped>
.login {width: 100vw;height: 100vh;position: fixed;top: 0;left: 0;z-index: 10;background-color: rgba(0, 0, 0, 0.5);
}
</style>

3 前端登录功能

<template><div class="login"><div class="box"><i class="el-icon-close" @click="close_login"></i><div class="content"><div class="nav"><span :class="{active: login_method === 'is_pwd'}" @click="change_login_method('is_pwd')">密码登录</span><span :class="{active: login_method === 'is_sms'}" @click="change_login_method('is_sms')">短信登录</span></div><el-form v-if="login_method === 'is_pwd'"><el-inputplaceholder="用户名/手机号/邮箱"prefix-icon="el-icon-user"v-model="username"clearable></el-input><el-inputplaceholder="密码"prefix-icon="el-icon-key"v-model="password"clearableshow-password></el-input><el-button type="primary" @click="login">登录</el-button></el-form><el-form v-if="login_method === 'is_sms'"><el-inputplaceholder="手机号"prefix-icon="el-icon-phone-outline"v-model="mobile"clearable@blur="check_mobile"></el-input><el-inputplaceholder="验证码"prefix-icon="el-icon-chat-line-round"v-model="sms"clearable><template slot="append"><span class="sms" @click="send_sms">{{ sms_interval }}</span></template></el-input><el-button @click="mobile_login" type="primary">登录</el-button></el-form><div class="foot"><span @click="go_register">立即注册</span></div></div></div></div>
</template><script>
export default {name: "Login",data() {return {username: '',password: '',mobile: '',sms: '',  // 验证码login_method: 'is_pwd',sms_interval: '获取验证码',is_send: false,}},methods: {close_login() {this.$emit('close')},go_register() {this.$emit('go')},change_login_method(method) {this.login_method = method;},check_mobile() {if (!this.mobile) return;// js正则:/正则语法/// '字符串'.match(/正则语法/)if (!this.mobile.match(/^1[3-9][0-9]{9}$/)) {this.$message({message: '手机号有误',type: 'warning',duration: 1000,onClose: () => {this.mobile = '';}});return false;}// 后台校验手机号是否已存在this.$axios({url: this.$settings.BASE_URL + 'user/mobile/check_mobile/?mobile=' + this.mobile,method: 'get',}).then(response => {if (response.data.code == 100) {this.$message({message: '账号正常,可以发送短信',type: 'success',duration: 1000,});// 发生验证码按钮才可以被点击this.is_send = true;} else {this.$message({message: '账号不存在',type: 'warning',duration: 1000,onClose: () => {this.mobile = '';}})}}).catch(() => {});},send_sms() {// this.is_send必须允许发生验证码,才可以往下执行逻辑if (!this.is_send) return;// 按钮点一次立即禁用this.is_send = false;let sms_interval_time = 60;this.sms_interval = "发送中...";// 定时器: setInterval(fn, time, args)// 往后台发送验证码this.$axios({url: this.$settings.BASE_URL + 'user/mobile/send_sms/',method: 'post',data: {mobile: this.mobile}}).then(response => {if (response.data.code == 100) { // 发送成功let timer = setInterval(() => {if (sms_interval_time <= 1) {clearInterval(timer);this.sms_interval = "获取验证码";this.is_send = true; // 重新回复点击发送功能的条件} else {sms_interval_time -= 1;this.sms_interval = `${sms_interval_time}秒后再发`;}}, 1000);} else {  // 发送失败this.sms_interval = "重新获取";this.is_send = true;this.$message({message: '短信发送失败',type: 'warning',duration: 3000});}}).catch(() => {this.sms_interval = "频率过快";this.is_send = true;})},login() {if (!(this.username && this.password)) {this.$message({message: '请填好账号密码',type: 'warning',duration: 1500});return false  // 直接结束逻辑}this.$axios({url: this.$settings.BASE_URL + 'user/login/mul_login/',method: 'post',data: {username: this.username,password: this.password,}}).then(response => {let username = response.data.username;let token = response.data.token;this.$cookies.set('username', username, '7d');this.$cookies.set('token', token, '7d');this.$emit('success', response.data);}).catch(error => {console.log(error.response.data)})},mobile_login() {if (!(this.mobile && this.sms)) {this.$message({message: '请填好手机与验证码',type: 'warning',duration: 1500});return false  // 直接结束逻辑}this.$axios({url: this.$settings.BASE_URL + 'user/login/sms_login/',method: 'post',data: {mobile: this.mobile,code: this.sms,}}).then(response => {if (response.data.code == 100) {let username = response.data.username;let token = response.data.token;this.$cookies.set('username', username, '7d');this.$cookies.set('token', token, '7d');this.$emit('success', response.data);} else {this.$message({message: '登录失败',type: 'warning',duration: 1500});}}).catch(error => {console.log(error.response.data)})}}
}
</script><style scoped>
.login {width: 100vw;height: 100vh;position: fixed;top: 0;left: 0;z-index: 10;background-color: rgba(0, 0, 0, 0.5);
}.box {width: 400px;height: 420px;background-color: white;border-radius: 10px;position: relative;top: calc(50vh - 210px);left: calc(50vw - 200px);
}.el-icon-close {position: absolute;font-weight: bold;font-size: 20px;top: 10px;right: 10px;cursor: pointer;
}.el-icon-close:hover {color: darkred;
}.content {position: absolute;top: 40px;width: 280px;left: 60px;
}.nav {font-size: 20px;height: 38px;border-bottom: 2px solid darkgrey;
}.nav > span {margin: 0 20px 0 35px;color: darkgrey;user-select: none;cursor: pointer;padding-bottom: 10px;border-bottom: 2px solid darkgrey;
}.nav > span.active {color: black;border-bottom: 3px solid black;padding-bottom: 9px;
}.el-input, .el-button {margin-top: 40px;
}.el-button {width: 100%;font-size: 18px;
}.foot > span {float: right;margin-top: 20px;color: orange;cursor: pointer;
}.sms {color: orange;cursor: pointer;display: inline-block;width: 70px;text-align: center;user-select: none;
}
</style>

4 前端注册功能

<template><div class="register"><div class="box"><i class="el-icon-close" @click="close_register"></i><div class="content"><div class="nav"><span class="active">新用户注册</span></div><el-form><el-inputplaceholder="手机号"prefix-icon="el-icon-phone-outline"v-model="mobile"clearable@blur="check_mobile"></el-input><el-inputplaceholder="密码"prefix-icon="el-icon-key"v-model="password"clearableshow-password></el-input><el-inputplaceholder="验证码"prefix-icon="el-icon-chat-line-round"v-model="sms"clearable><template slot="append"><span class="sms" @click="send_sms">{{ sms_interval }}</span></template></el-input><el-button @click="register" type="primary">注册</el-button></el-form><div class="foot"><span @click="go_login">立即登录</span></div></div></div></div>
</template><script>
export default {name: "Register",data() {return {mobile: '',password: '',sms: '',sms_interval: '获取验证码',is_send: false,}},methods: {close_register() {this.$emit('close', false)},go_login() {this.$emit('go')},check_mobile() {if (!this.mobile) return;// js正则:/正则语法/// '字符串'.match(/正则语法/)if (!this.mobile.match(/^1[3-9][0-9]{9}$/)) {this.$message({message: '手机号有误',type: 'warning',duration: 1000,onClose: () => {this.mobile = '';}});return false;}// 后台校验手机号是否已存在this.$axios({url: this.$settings.BASE_URL + 'user/mobile/check_mobile/?mobile='+this.mobile,method: 'get',}).then(response => {if (response.data.code!=100) {this.$message({message: '欢迎注册我们的平台',type: 'success',duration: 1500,});// 发生验证码按钮才可以被点击this.is_send = true;} else {this.$message({message: '账号已存在,请直接登录',type: 'warning',duration: 1500,})}}).catch(() => {});},send_sms() {// this.is_send必须允许发生验证码,才可以往下执行逻辑if (!this.is_send) return;// 按钮点一次立即禁用this.is_send = false;let sms_interval_time = 60;this.sms_interval = "发送中...";// 定时器: setInterval(fn, time, args)// 往后台发送验证码this.$axios({url: this.$settings.BASE_URL + 'user/mobile/send_sms/',method: 'post',data: {mobile: this.mobile}}).then(response => {if (response.data.code==100) { // 发送成功let timer = setInterval(() => {if (sms_interval_time <= 1) {clearInterval(timer);this.sms_interval = "获取验证码";this.is_send = true; // 重新回复点击发送功能的条件} else {sms_interval_time -= 1;this.sms_interval = `${sms_interval_time}秒后再发`;}}, 1000);} else {  // 发送失败this.sms_interval = "重新获取";this.is_send = true;this.$message({message: '短信发送失败',type: 'warning',duration: 3000});}}).catch(() => {this.sms_interval = "频率过快";this.is_send = true;})},register() {if (!(this.mobile && this.sms && this.password)) {this.$message({message: '请填好手机、密码与验证码',type: 'warning',duration: 1500});return false  // 直接结束逻辑}this.$axios({url: this.$settings.BASE_URL + 'user/register/register/',method: 'post',data: {mobile: this.mobile,code: this.sms,password: this.password}}).then(response => {this.$message({message: '注册成功,3秒跳转登录页面',type: 'success',duration: 3000,showClose: true,onClose: () => {// 去向成功页面this.$emit('success')}});}).catch(error => {this.$message({message: '注册失败,请重新注册',type: 'warning',duration: 1500,showClose: true,onClose: () => {// 清空所有输入框this.mobile = '';this.password = '';this.sms = '';}});})}}
}
</script><style scoped>
.register {width: 100vw;height: 100vh;position: fixed;top: 0;left: 0;z-index: 10;background-color: rgba(0, 0, 0, 0.3);
}.box {width: 400px;height: 480px;background-color: white;border-radius: 10px;position: relative;top: calc(50vh - 240px);left: calc(50vw - 200px);
}.el-icon-close {position: absolute;font-weight: bold;font-size: 20px;top: 10px;right: 10px;cursor: pointer;
}.el-icon-close:hover {color: darkred;
}.content {position: absolute;top: 40px;width: 280px;left: 60px;
}.nav {font-size: 20px;height: 38px;border-bottom: 2px solid darkgrey;
}.nav > span {margin-left: 90px;color: darkgrey;user-select: none;cursor: pointer;padding-bottom: 10px;border-bottom: 2px solid darkgrey;
}.nav > span.active {color: black;border-bottom: 3px solid black;padding-bottom: 9px;
}.el-input, .el-button {margin-top: 40px;
}.el-button {width: 100%;font-size: 18px;
}.foot > span {float: right;margin-top: 20px;color: orange;cursor: pointer;
}.sms {color: orange;cursor: pointer;display: inline-block;width: 70px;text-align: center;user-select: none;
}
</style>

Header.vue

<template><div class="header"><div class="slogan"><p>老男孩IT教育 | 帮助有志向的年轻人通过努力学习获得体面的工作和生活</p></div><div class="nav"><ul class="left-part"><li class="logo"><router-link to="/"><img src="../assets/img/head-logo.svg" alt=""></router-link></li><li class="ele"><span @click="goPage('/free-course')" :class="{active: url_path === '/free-course'}">免费课</span></li><li class="ele"><span @click="goPage('/actual-course')" :class="{active: url_path === '/actual-course'}">实战课</span></li><li class="ele"><span @click="goPage('/light-course')" :class="{active: url_path === '/light-course'}">轻课</span></li></ul><div class="right-part"><div v-if="!username"><span @click="handleLogin">登录</span><span class="line">|</span><span @click="handleRegister">注册</span></div><div v-else><span>{{ username }}</span><span class="line">|</span><span @click="logOut">注销</span></div></div><Login v-if="loginShow" @close="handleClose" @success="success_login" @go="go_register"></Login><Register v-if="registerShow" @close="handleRegisterClose" @success="success_register"@go="success_register"></Register></div></div></template>
<script>
import Login from "@/components/Login.vue";
import Register from "@/components/Register.vue";export default {name: "Header",data() {return {url_path: sessionStorage.url_path || '/',loginShow: false,registerShow: false,username: '',token: ''}},methods: {handleRegister() {this.registerShow = true},handleRegisterClose() {this.registerShow = false},success_register() {this.registerShow = falsethis.loginShow = true},go_register() {this.registerShow = truethis.loginShow = false},logOut() {this.username = ''this.token = ''this.$cookies.remove('username')this.$cookies.remove('token')},goPage(url_path) {// 已经是当前路由就没有必要重新跳转if (this.url_path !== url_path) {this.$router.push(url_path);}sessionStorage.url_path = url_path;},handleLogin() {this.loginShow = true},handleClose() {this.loginShow = false},success_login(data) {this.loginShow = false;  // 模态框消耗this.username = data.username;this.token = data.token;}},created() {sessionStorage.url_path = this.$route.path;this.url_path = this.$route.path;this.username = this.$cookies.get('username')},components: {Register,Login}
}
</script><style scoped>
.header {background-color: white;box-shadow: 0 0 5px 0 #aaa;
}.header:after {content: "";display: block;clear: both;
}.slogan {background-color: #eee;height: 40px;
}.slogan p {width: 1200px;margin: 0 auto;color: #aaa;font-size: 13px;line-height: 40px;
}.nav {background-color: white;user-select: none;width: 1200px;margin: 0 auto;}.nav ul {padding: 15px 0;float: left;
}.nav ul:after {clear: both;content: '';display: block;
}.nav ul li {float: left;
}.logo {margin-right: 20px;
}.ele {margin: 0 20px;
}.ele span {display: block;font: 15px/36px '微软雅黑';border-bottom: 2px solid transparent;cursor: pointer;
}.ele span:hover {border-bottom-color: orange;
}.ele span.active {color: orange;border-bottom-color: orange;
}.right-part {float: right;
}.right-part .line {margin: 0 10px;
}.right-part span {line-height: 68px;cursor: pointer;
}
</style>

相关文章:

day08-注册功能、前端登录注册页面复制、前端登录功能、前端注册功能

1 注册功能 补充(开放文件夹内) 2 前端登录注册页面复制 4 前端注册功能 1 注册功能 # 分析前端&#xff1a;携带数据格式 {mobile:,code:,password}后端&#xff1a;-1 视图类---》注册方法-2 序列化类---》校验&#xff0c;保存&#xff08;表中字段多&#xff0c;传的少---…...

rust: function

///file: nestd.rs ///ide: RustRover 233.8264.22 /// /// /// /***自定义函数*/ pub fn function() {println!("called my::nested::function()"); }#[allow(dead_code)] fn private_function() {println!("called my::nested::private_function()"); }/…...

零代码编程:用ChatGPT批量下载谷歌podcast上的播客音频

谷歌podcast有很多播客音频&#xff0c;如何批量下载到电脑呢&#xff1f; 以这个播客为例&#xff1a; https://podcasts.google.com/feed/aHR0cHM6Ly9oYWRhcnNoZW1lc2guY29tL2ZlZWQvcG9kY2FzdC8?saX&ved0CAkQlvsGahcKEwi4uauWsvKBAxUAAAAAHQAAAAAQAg 查看网页源代码&a…...

nginx.4——正向代理和反向代理(七层代理和四层代理)

1、正向代理反向代理 nginx当中有两种代理方式 七层代理(http协议) 四层代理(tcp/udp流量转发) 七层代理 七层代理&#xff1a;代理的是http的请求和响应。 客户端请求代理服务器&#xff0c;由代理服务器转发给客户端http请求。转发到内部服务器&#xff08;可以单台&#…...

基于RuoYi-Flowable-Plus的若依ruoyi-nbcio支持自定义业务表单流程(三)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 相应的后端也要做一些调整 1、启动流程修改如下&#xff1a; /*** 启动流程实例*/private R startProce…...

Spring-事务源码解析2

上一篇文章我们介绍了事务开启注解EnableTransactionManagement源码解析《Spring-事务源码解析1》 里面提到了2个关键组件&#xff0c;这里我们分析下Spring如何利用这2个组件来给Bean创建代理对象。 本篇文章我们看下当一个类里面包含了Transactional注解&#xff0c;Spring如…...

基于ssm008医院门诊挂号系统+jsp【附PPT|开题|任务书|万字文档(LW)和搭建文档】

主要功能 后台登录&#xff1a;4个角色 管理员&#xff1a; ①个人中心、修改密码、个人信息 ②药房管理、护士管理、医生管理、病人信息管理、科室信息管理、挂号管理、诊断信息管理、病例库管理、开药信息管理、药品信息管理、收费信息管理 药房&#xff1a; ①个人中心、修…...

【Linux常用命令11】Linux文件与权限详解

权限 r &#xff1a;读权限&#xff0c;用数字4表示 w &#xff1a;写权限&#xff0c;用数字2表示 x &#xff1a;执行权限&#xff0c;用数字1表示 常用权限 644&#xff1a;代表所有者拥有读、写权限&#xff0c;而所属组和其他人拥有只读权限。 755&#xff1a;代表所有…...

BAT026:删除当前目录指定文件夹以外的文件夹

引言&#xff1a;编写批处理程序&#xff0c;实现删除当前目录指定文件夹以外的文件夹。 一、新建Windows批处理文件 参考博客&#xff1a; CSDNhttps://mp.csdn.net/mp_blog/creation/editor/132137544 二、写入批处理代码 1.右键新建的批处理文件&#xff0c;点击【编辑】…...

Python浏览器自动化

如果你正在进行手机爬虫的工作&#xff0c;并且希望通过模拟浏览器行为来抓取数据&#xff0c;那么Pyppeteer将会是你的理想选择。Pyppeteer是一个强大的Python库&#xff0c;它可以让你控制浏览器进行自动化操作&#xff0c;如点击按钮、填写表单等&#xff0c;从而实现数据的…...

基于tornado BELLE 搭建本地的web 服务

我的github 将BELLE 封装成web 后端服务&#xff0c;采用tornado 框架 import timeimport torch import torch.nn as nnfrom gptq import * from modelutils import * from quant import *from transformers import AutoTokenizer import sys import json #import lightgbm a…...

信息系统漏洞与风险管理制度

1、总则 1.1、目的 为了进一步规范XXXXX单位信息系统风险管理活动&#xff0c;提升风险管理工作的可操纵性和适用性&#xff0c;使信息网络正常运行&#xff0c;防止网络攻击&#xff0c;保证业务的正常进行&#xff0c;依据XXXXX单位员的相关规范和标准规定&#xff0c;特制…...

Hadoop3教程(十七):MapReduce之ReduceJoin案例分析

文章目录 &#xff08;113&#xff09;ReduceJoin案例需求分析&#xff08;114&#xff09;ReduceJoin案例代码实操 - TableBean&#xff08;115&#xff09;ReduceJoin案例代码实操 - TableMapper&#xff08;116&#xff09;ReduceJoin案例代码实操 - Reducer及Driver参考文献…...

BAT026:删除当前目录及子目录下的空文件夹

引言&#xff1a;编写批处理程序&#xff0c;实现批量删除当前目录及子目录下的空文件夹。 一、新建Windows批处理文件 参考博客&#xff1a; CSDNhttps://mp.csdn.net/mp_blog/creation/editor/132137544 二、写入批处理代码 1.右键新建的批处理文件&#xff0c;点击【编辑…...

nodejs+vue网课学习平台

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…...

Can Language Models Make Fun? A Case Study in Chinese Comical Crosstalk

本文是LLM系列文章&#xff0c;针对《Can Language Models Make Fun? A Case Study in Chinese Comical Crosstalk》的翻译。 语言模型能制造乐趣吗?中国滑稽相声个案研究 摘要1 引言2 问题定义3 数据集4 使用自动评估生成基准5 人工评估6 讨论7 结论与未来工作 摘要 语言是…...

阿里云云服务器实例使用教学

目录 云服务器免费试用 详细步骤 Xshell 远程连接 云服务器免费试用 阿里云云服务器网址&#xff1a;阿里云免费试用 - 阿里云 详细步骤 访问阿里云免费试用。单击页面右上方的登录/注册按钮&#xff0c;并根据页面提示完成账号登录&#xff08;已有阿里云账号&#xff09;…...

promisify 是 Node.js 标准库 util 模块中的一个函数

promisify 是 Node.js 标准库 util 模块中的一个函数。它用于将遵循 Node.js 回调风格的函数转换为返回 Promise 的函数。这使得你可以使用 async/await 语法来等待异步操作完成&#xff0c;从而让异步代码看起来更像同步代码。 在 Node.js 的回调风格中&#xff0c;函数通常接…...

ArcGIS在VUE框架中的构建思想

项目快要上线了&#xff0c;出乎意料的有些空闲时间。想着就把其他公司开发的一期代码里面&#xff0c;把关于地图方面的代码给优化一下。试运行的时候&#xff0c;客户说控制台有很多飘红的报错&#xff0c;他们很在意&#xff0c;虽然很不情愿&#xff0c;但能改的就给改了吧…...

【Overload游戏引擎细节分析】视图投影矩阵计算与摄像机

本文只罗列公式&#xff0c;不做具体的推导。 OpenGL本身没有摄像机(Camera)的概念&#xff0c;但我们为了产品上的需求与编程上的方便&#xff0c;一般会抽象一个摄像机组件。摄像机类似于人眼&#xff0c;可以建立一个本地坐标系。相机的位置是坐标原点&#xff0c;摄像机的朝…...

什么是云原生?零基础学云原生难吗?

伴随着云计算的浪潮&#xff0c;云原生概念也应运而生&#xff0c;而且火得一塌糊涂&#xff0c;但真正谈起“云原生”&#xff0c;大多数非 IT 从业者的认知往往仅限于将服务应用放入云端&#xff0c;在云上处理业务。实际上&#xff0c;云原生远不止于此。 现在越来越多的企…...

Ubuntu18.04下载安装基于使用QT的pcl1.13+vtk8.2,以及卸载

一、QVTKWidget、QVTKWidget2、QVTKOpenGLWidget、QVTKOpenGLNativeWidget 区别 1.Qt版本 Qt5.4以前版本&#xff1a;QVTKWidget2/QVTKWidget。 Qt5.4以后版本&#xff1a;QVTKOpenGLWidget/QVTKOpenGLWidget。 2.VTK版本(Qt版本为5.4之后) 在VTK8.2以前的版本&#xff1a;QVT…...

7 使用Docker容器管理的tomcat容器中的项目连接mysql数据库

1、查看容器的IP 1&#xff09;进入容器 docker exec -it mysql-test /bin/bash 2&#xff09;显示hosts文件内容 cat /etc/hosts 这里容器的ip为172.17.0.2 除了上面的方法外&#xff0c;也可以在容器外使用docker inspect查看容器的IP docker inspect mysql-test 以下为…...

双节前把我的网站重构了一遍

赶在中秋国庆假期前&#xff0c;终于将我的网站&#xff08;https://spacexcode.com/[1]&#xff09;结构定好了&#xff0c;如之前所说&#xff0c;这个网站的定位就是作为自己的前端知识沉淀。内容大致从&#xff1a;前端涉及的基础知识分类汇总&#xff08;知识库&#xff0…...

基于 nodejs+vue网上考勤系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…...

以数智化指标管理,驱动光伏能源行业的市场推进

近年来&#xff0c;碳中和、碳达峰等降低碳排放、提升环境健康度的政策和技术改进正在不断地被社会所认可和引起重视&#xff0c;也被越来越多的企业在生产运营和基础建设中列为重要目标之一。而光伏能源行业作为全球绿色能源、新能源的优秀解决方案&#xff0c;充分利用太阳能…...

lv8 嵌入式开发-网络编程开发 18 广播与组播的实现

目录 1 广播 1.1 什么是广播&#xff1f; 1.2 广播地址 1.3 广播的实现 2 组播 2.1 分类的IP地址 2.2 多播 IP 地址 2.3 组播的实现 1 广播 1.1 什么是广播&#xff1f; 数据包发送方式只有一个接受方&#xff0c;称为单播 如果同时发给局域网中的所有主机&#xff0…...

前端面试题个人笔记(后面继续更新完善)

文章目录 填空题部分简答题部分 if有好答案请各位大佬们在底下评论上&#xff0c;感谢 填空题部分 1、常见的css选择器 2、getElementById获取元素的&#xff08;DOM&#xff09;对象 简答题部分 1、介绍一下你对RESTful API的理解以及它的优势&#xff1f; 答&#xff1a; …...

软件设计之工厂方法模式

工厂方法模式指定义一个创建对象的接口&#xff0c;让子类决定实例化哪一个类。 结构关系如下&#xff1a; 可以看到&#xff0c;客户端创建了两个接口&#xff0c;一个AbstractFactory&#xff0c;负责创建产品&#xff0c;一个Product&#xff0c;负责产品的实现。ConcreteF…...

【Linux】shell运行原理及权限

主页点击直达&#xff1a;个人主页 我的小仓库&#xff1a;代码仓库 C语言偷着笑&#xff1a;C语言专栏 数据结构挨打小记&#xff1a;初阶数据结构专栏 Linux被操作记&#xff1a;Linux专栏 LeetCode刷题掉发记&#xff1a;LeetCode刷题 算法&#xff1a;算法专栏 C头疼…...

湖南网站建设公司磐石网络/阿里巴巴指数查询

这篇文章是我看哔哩哔哩上学习的笔记,学习的地址如下: https://www.bilibili.com/video/BV164411Y732 因本人才疏学浅&#xff0c;如有错误之处&#xff0c;还请见谅 文章目录多段跳冲刺瞬移注意点结尾多段跳 UE4里面自带的人物是有这个属性的 在这里 可以修改数量 冲刺 …...

东莞网页制作招聘信息/怎样优化网站

一、 QT内置的ICON资源保存在QStyle类里。 可以通过成员函数 QStyle::standardIcon 来获取。 保存的icon有&#xff1a; enum QStyle::StandardPixmap This enum describes the available standard pixmaps. A standard pixmap is a pixmap that can follow some existing…...

苏州网络网站建设/seo内容优化方法

大家好&#xff0c;我偶然发现了一个很酷的jQuery插件&#xff0c;称为innerfade。 基本上&#xff0c;它旋转存储在列表中的元素&#xff0c;这些元素可能是文本&#xff0c;图像&#xff0c;链接等。 可以与任何容器标签&#xff08;例如divs或uls&#xff09;&#xff0c;所…...

星海湾建设管理中心网站/沈阳seo关键词排名

ApplicationInspector是一款功能强大的软件源代码分析与审计工具&#xff0c;它可以帮助研究人员识别和发现目标应用程序中的公众周知的功能以及源代码中有意思的特性&#xff0c;并清楚目标应用的本质特征以及实现的功能。 ApplicationInspector跟传统静态分析工具不同的是&a…...

珠海市网站开发公司/营销网站建设制作

开发原因&#xff1a; 页面需要做页面统计&#xff0c;需要访问域。 访问域方法&#xff1a; using System.DirectoryServices.AccountManagement;命名空间负责管理。 MSDN&#xff1a;https://msdn.microsoft.com/en-us/library/system.directoryservices.accountmanagement%2…...

品牌网站建设相关问题/百度权重10的网站

前言&#xff1a;Wire.h是Arduino的IIC库。 一、Wire库函数 Wire.begin()Wire.requestFrom()Wire.beginTransmission()Wire.endTransmission()Wire.write()Wire.available()Wire.read()Wire.onReceive()Wire.onRequest()二、库函数详细介绍 1、Wire.begin() 和 Wire.begin(addr…...