大家好,我叫亓官劼(qí guān jié ),这个《小白都能看懂的实战教程 手把手教你Python Web全栈开发》是一个零基础的实战教程,手把手带你开发一套系统,带你了解Python web全栈开发,目前正在连续更新中,如果喜欢的话可以点赞关注博主,后面会持续更新。
博主博客文章内容导航(实时更新) 更多优质文章推荐:
收藏!最详细的Python全栈开发指南 看完这篇你还不会Python全栈开发 你来打我!!!
一本教你如何在前端实现富文本编辑器
小白都能看得懂的教程 一本教你如何在前端实现markdown编辑器
Flask学习(基本语法)
一文教会你Bootstrap,让你也可以快速建站
一文教你如何白嫖JetBrains全家桶(IDEA/PtChram/CLion)免费正版
小白都能看懂的实战教程 手把手教你Python Web全栈开发 (DAY 1)
小白都能看懂的实战教程 手把手教你Python Web全栈开发 (DAY 2)
小白都能看懂的实战教程 手把手教你Python Web全栈开发 (DAY 3)
小白都能看懂的实战教程 手把手教你Python Web全栈开发 (DAY 4)
小白都能看懂的实战教程 手把手教你Python Web全栈开发 (DAY 5)
小白都能看懂的实战教程 手把手教你Python Web全栈开发 (DAY 6)
小白都能看懂的实战教程 手把手教你Python Web全栈开发 (DAY 7)
本项目所有源码在GitHub开源,GitHub地址为:OnlineForumPlatform有需要源码可以前去查看,喜欢的话可以star一下
小白都能看懂的实战教程 手把手教你Python Web全栈开发 DAY 5
今天来到我们实战系列的第五天,在之前的四天里,我们已经完成了在线论坛系统的导航条、登录、注册、论坛页面、帖子详情页面等的功能实现,目前我们的论坛已经可以进行帖子发布,查看帖子详情,并且进行回复信息了。在上一讲中,我们还是先了功能限制,对不同用户的访问进行过滤。下面我们继续来完善我们的这个在线论坛系统,今天我们来完善我们的在线论坛系统的个人中心。
5.1个人中心页面实现
今天我们就来实现我们的个人中心页面,这里本来是打算使用AJAX实现的,个人中心使用AJAX实现的话,可以使得整体不变,当我们点击各个分栏的时候只返回各个分栏的信息,是一个非常好的选择。但是由于这个系列打算让每一个看的人都能够看懂,实现这个功能,所以我们这简化一点,直接使用普通的一个请求页面。后面有兴趣的同学可以进行进一步的优化,后面有空的话,我也会将后面逐渐优化的教程发出来。
本文原创为CSDN博主亓官劼,原文链接为:收藏!最详细的Python全栈开发指南 看完这篇你还不会Python全栈开发 你来打我!!!,请大家支持原创,拒绝抄袭。
5.1.1 个人中心页面-后端
那我们就开始实现我们我的个人中心了,这里我们的个人中心只显示我们的一些基础资料(我们也没设置多少),这里只做一个大致的样式展示,更多的功能我们后续慢慢的进行一个拓展。 我们去看了一下我们的数据库,发现我们个人中心能够进行展示的,也就只有我们的email、昵称、用户类型、创建时间和手机号码可以进行一个展示和修改。那我们就展示这么多吧,大家也可以添加一下个性签名,头像等一系列的个人标识进入数据库中。 那我们就开始获取我们的数据了,首先我们需要限制只有登录的用户才可以进入到我们的个人中心,限制的方法在上一讲中已经实现了。
@app. route( '/personal' )
@login_limit
def personal ( ) :
if request. method == 'GET' :
email = session. get( 'email' )
try :
cur = db. close( )
sql = "select email, nickname, type, create_time, phone from UserInformation where email = '%s'" % email
db. ping( reconnect= True )
cur. execute( sql)
personal_info = cur. fetchone( )
except Exception as e:
raise e
return render_template( 'personal.html' , personal_info = personal_info)
5.1.2 个人中心页面-前端
在后端获取完数据之后,我们在前端对获取到的数据进行展示即可。所以我们先设计个勉强能够看得过去的架子,来展示我们的数据。先上个效果图吧: 确实是比较简陋的,但是功能齐全吧。我们这里使用的是标签进行显示的,也可以使用
进行显示。这里时间上代码吧,personal.html的代码为:
{% extends 'base.html' %}
{% block title %}
个人中心
{% endblock %}
{% block css %}
< link rel = " stylesheet" href = " /static/css/personal.css" >
{% endblock %}
{% block content %}
< div class = " personal_content" >
< div class = " page-header" id = " page_header" >
< h1> 个人中心< small> Personal center small> h1>
div>
< div class = " personal_info" >
< table>
< tr class = " personal_tr" >
< td class = " personal_td" >
Email address:
td>
< td class = " personal_td" >
{{ personal_info[0] }}
td>
tr>
< tr class = " personal_tr" >
< td class = " personal_td" >
昵称:
td>
< td class = " personal_td" >
{{ personal_info[1] }}
td>
tr>
< tr class = " personal_tr" >
< td class = " personal_td" >
注册时间:
td>
< td class = " personal_td" >
{{ personal_info[3] }}
td>
tr>
< tr class = " personal_tr" >
< td class = " personal_td" >
手机号:
td>
< td class = " personal_td" >
{{ personal_info[4] }}
td>
tr>
< tr class = " personal_tr" >
< td class = " personal_td" >
用户类型:
td>
< td class = " personal_td" >
{% if personal_info[2] == 0 %}
普通用户
{% else %}
管理员
{% endif %}
td>
tr>
table>
div>
div>
{% endblock %}
personal.css代码为:
.personal_content {
margin-left : 20%;
margin-right : 20%;
margin-top : 5%;
}
#page_header {
text-align : center;
}
.personal_info {
font-size : 24px;
margin-left : 10%
;
}
.personal_td {
width : 300px;
}
.personal_tr {
height : 50px;
}
同时这里也修改了base.html的内容,我们让个人中心在下拉列表中进行显示,我们修改了下拉列表中第一个值和链接,效果图为: 这里的修改的代码为:
< li class = " dropdown" >
< a href = " #" class = " dropdown-toggle" data-toggle = " dropdown" role = " button" aria-haspopup = " true" aria-expanded = " false" > {{ nickname }} < span class = " caret" > span> a>
< ul class = " dropdown-menu" >
< li> < a href = " {{ url_for(' personal' ) }}" > 个人中心 a> li>
< li> < a href = " #" > Another action a> li>
< li> < a href = " #" > Something else here a> li>
< li role = " separator" class = " divider" > li>
< li> < a href = " #" > Separated link a> li>
ul>
li>
5.2 修改密码功能实现
到这里我们来实现我们的修改密码功能,其实如果使用AJAX实现的话,这一讲的所有功能都应该在个人中心一个页面中进行体现的,我们这里就先这样分开实现吧。大家可以自行改进~ 在这里我们就先从前端开始实现了。
本文原创为CSDN博主亓官劼,原文链接为:收藏!最详细的Python全栈开发指南 看完这篇你还不会Python全栈开发 你来打我!!!,请大家支持原创,拒绝抄袭。
5.2.1 修改密码功能实现-前端
我们修改密码的话,这里采用一个简单的验证,就是知道我们当前的密码就可以进行一个修改密码。我们设计一个表单,分别输入旧密码,新密码,确认新密码即可。先上个效果图再说实现: 这效果图还是大家熟悉的味道,有没有!我们这里还是一个简单的div,里面加个页头,下面3个input
。这里和前面的原理一样,这里我们预留了一个flash传输消息的地方,用于等会后端向前面传递消息提示,我们就直接上代码吧: change_password.html:
{% extends 'base.html' %}
{% block title %}
修改密码
{% endblock %}
{% block css %}
< link rel = " stylesheet" href = " /static/css/change_password.css" >
{% endblock %}
{% block content %}
< div class = " change_password_content" >
< div class = " page-header" id = " page_header" >
< h1> 修改密码< small> Change Password small> h1>
div>
< div class = " change_password_div" >
< form method = " post" >
< span style =" font-size : 20px; color : red " >
{% for item in get_flashed_messages() %}
{{ item }}
{% endfor %}
span>
< div class = " form-group" >
< label for = " exampleInputPassword1" > 旧密码: label>
< input type = " password" class = " form-control" name = " old_password" id = " exampleInputPassword1" placeholder = " 密码" >
div>
< div class = " form-group" >
< label for = " exampleInputPassword1" > 新密码: label>
< input type = " password" class = " form-control" name = " new_password1" id = " exampleInputPassword1" placeholder = " 密码" >
div>
< div class = " form-group" >
< label for = " exampleInputPassword1" > 确认密码: label>
< input type = " password" class = " form-control" name = " new_password2" id = " exampleInputPassword1" placeholder = " 密码" >
div>
< div id = " password_butt" >
< button type = " submit" class = " btn btn-default" > 修改密码 button>
div>
form>
div>
div>
{% endblock %}
change_paasword.css:
#page_header {
text-align : center;
}
.change_password_content {
margin-left : 20%;
margin-right : 20%;
margin-top : 8%;
}
#password_butt {
text-align : center;
}
5.2.1 修改密码功能实现-后端
下面我们来实现修改密码的后端功能,使他能够正确的修改密码。我们首先获取我们的当前登录用户的用户名,这里我们的修改密码的功能也是只有我们登录的用户才可以访问的功能。首先我们判断是不是3个数据都获取到了,并且2个密码一致,如果有错误,我们返回提示。如果数据都正确的话,我们开始处理,先获取我们的email。我们获取到email之后去数据库中查找我们的密码,这里的密码是加密的,所以我们要使用check_password_hash()来进行验证,如果旧密码是正确的,我们就进行修改新密码,如果不正确,则返回。完整的后端代码为:
@app. route( '/change_password' , methods= [ 'GET' , 'POST' ] )
@login_limit
def change_password ( ) :
if request. method == 'GET' :
return render_template( 'change_password.html' )
if request. method == 'POST' :
old_password = request. form. get( 'old_password' )
new_password1 = request. form. get( 'new_password1' )
new_password2 = request. form. get( 'new_password2' )
if not all ( [ old_password, new_password1, new_password2] ) :
flash( "信息填写不全!" )
return render_template( 'change_password.html' )
if new_password1 != new_password2:
flash( "两次新密码不一致!" )
return render_template( 'change_password.html' )
email = session. get( 'email' )
try :
cur = db. cursor( )
sql = "select password from UserInformation where email = '%s'" % email
db. ping( reconnect= True )
cur. execute( sql)
password = cur. fetchone( ) [ 0 ]
if check_password_hash( password, old_password) :
password = generate_password_hash( new_password1, method= "pbkdf2:sha256" , salt_length= 8 )
sql = "update UserInformation set password = '%s' where email = '%s'" % ( password, email)
db. ping( reconnect= True )
cur. execute( sql)
db. commit( )
cur. close( )
return render_template( 'index.html' )
else :
flash( "旧密码错误!" )
return render_template( 'change_password.html' )
except Exception as e:
raise e
在实现后端功能之后,我们可以再导航栏中加入修改密码的导航,我们还是加载下来列表中,将第二个修改为修改密码。
< li class = " dropdown" >
< a href = " #" class = " dropdown-toggle" data-toggle = " dropdown" role = " button" aria-haspopup = " true" aria-expanded = " false" > {{ nickname }} < span class = " caret" > span> a>
< ul class = " dropdown-menu" >
< li> < a href = " {{ url_for(' personal' ) }}" > 个人中心 a> li>
< li> < a href = " {{ url_for(' change_password' ) }}" > 修改密码 a> li>
< li> < a href = " #" > Something else here a> li>
< li role = " separator" class = " divider" > li>
< li> < a href = " #" > Separated link a> li>
ul>
li>
效果为:
5.3 查看发布帖子功能实现-后端
5.3.1 查看发布帖子功能实现-后端
下面我们来实现个人中心的另一个功能,就是查看我们自己所发布的所有的帖子信息,并且可以在此页面进入到我们所发布的帖子中去。这里我们还是先写后端,向前端去传输我们的数据。这个页面是也是需要我们登录才可以查看的,因为查看的是我们所登录的这个账号所发布的帖子列表。 所以这里我们先获取我们需要的数据,然后把它返回到前端即可,这里先创建一个前端的html文件,这里使用show_issue.html,我们后端的代码为:
@app. route( '/show_issue' )
@login_limit
def show_issue ( ) :
if request. method == 'GET' :
email = session. get( 'email' )
try :
cur = db. cursor( )
sql = "select ino, email, title, issue_time from Issue where email = '%s' order by issue_time desc" % email
db. ping( reconnect= True )
cur. execute( sql)
issue_detail = cur. fetchall( )
except Exception as e:
raise e
return render_template( 'show_issue.html' , issue_detail= issue_detail)
5.3.2 查看发布帖子功能实现-前端
下面我们开始实现前端的一个功能,我们这里使用和论坛列表相似的功能,我们这里只需要显示帖子的标题即可。这里先上效果图: 我们这里只需要设计一个
将我们后端发送的数据仅显示出来即可。show_issue.html:
{% extends 'base.html' %}
{% block title %}
已发布的帖子
{% endblock %}
{% block css %}
< link rel = " stylesheet" href = " /static/css/show_issue.css" >
{% endblock %}
{% block content %}
< div class = " show_issue_content" >
< div class = " page-header" id = " page_header" >
< h1> 已发布的帖子列表 h1>
div>
< div class = " issue_list_div" >
< ul class = " issue_list_ul" >
{% for issue in issue_detail %}
< li class = " issue_list_li" >
< div class = " issue_div" >
< div class = " issue_content" >
< h3>
< a href = " {{ url_for(' issue_detail' ,Ino = issue[0]) }}" >
{{ issue[2] }}
a>
h3>
div>
< div class = " author_info" >
< p class = " post-info" >
< span> 发布时间:{{ issue[3] }} span>
p>
div>
div>
li>
{% endfor %}
ul>
div>
div>
{% endblock %}
show_issue.css:
#page_header {
text-align : center;
}
.issue_list_ul {
list-style-type : none;
margin-left : 0;
padding-left : 0;
}
.author_info {
text-align : right;
}
.issue_div {
border-bottom : 1px solid #eee;
}
.issue_content {
max-height : 200px;
}
.show_issue_content {
margin-right : 20%;
margin-left : 20%;
margin-top : 8%;
}
这里我们也修改一下base.html文件,设置下来列表。 我们在导航栏的下拉列表中添加我们这章个人中心的三个页面,这里贴一下目前base.html的全部代码,防止有的小伙伴找不到修改的地方。
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title>
{% block title %}
{# 其他页面重写标题的地方#}
{% endblock %}
title>
{% block css %}
{# 其他页面引用样式或者js的地方#}
{% endblock %}
< link rel = " stylesheet" href = " /static/css/base.css" >
< script src = " https://cdn.bootcss.com/jquery/3.4.1/jquery.js" > script>
< script src = " https://cdn.bootcss.com/twitter-bootstrap/3.4.0/js/bootstrap.min.js" > script>
< link href = " https://cdn.bootcss.com/twitter-bootstrap/3.4.0/css/bootstrap.min.css" rel = " stylesheet" >
head>
< body>
< div class = " navigation_bar" >
< nav class = " navbar navbar-default" >
< div class = " container-fluid" >
{# 由于这里我们不需要使用商标,所以对Bran部分进行了删除#}
< div class = " collapse navbar-collapse" id = " bs-example-navbar-collapse-1" >
< ul class = " nav navbar-nav" >
< li class = " {% block index_class %}{% endblock %}" > < a href = " {{ url_for(' index' ) }}" > 首页< span class = " sr-only" > (current) span> a> li>
< li class = " {% block formula_class %}{% endblock %}" > < a href = " {{ url_for(' formula' ) }}" > 论坛 a> li>
ul>
< form class = " navbar-form navbar-left" >
< div class = " form-group" >
< input type = " text" class = " form-control" placeholder = " Search" >
div>
< button type = " submit" class = " btn btn-default" > Submit button>
form>
< ul class = " nav navbar-nav navbar-right" >
{% if email %}
< li class = " {% block post_issue_class %}{% endblock %}" > < a href = " {{ url_for(' post_issue' ) }}" > 发布帖子 a> li>
< li class = " " > < a href = " {{ url_for(' register' ) }}" > 注销 a> li>
< li class = " dropdown" >
< a href = " #" class = " dropdown-toggle" data-toggle = " dropdown" role = " button" aria-haspopup = " true" aria-expanded = " false" > {{ nickname }} < span class = " caret" > span> a>
< ul class = " dropdown-menu" >
< li> < a href = " {{ url_for(' personal' ) }}" > 个人中心 a> li>
< li> < a href = " {{ url_for(' change_password' ) }}" > 修改密码 a> li>
< li role = " separator" class = " divider" > li>
< li> < a href = " {{ url_for(' show_issue' ) }}" > 已发布的帖子 a> li>
ul>
li>
{% else %}
< li class = " {% block register_class %}{% endblock %}" > < a href = " {{ url_for(' register' ) }}" > 注册 a> li>
< li class = " {% block login_class %} {% endblock %}" > < a href = " {{ url_for(' login' ) }}" > 登录 a> li>
{% endif %}
ul>
div>
div>
nav>
div>
< div class = " content" style =" padding : 0; margin : 0; " >
{% block content %}
{# 其他页面重写页面内容的地方#}
{% endblock %}
div>
body>
html>
感谢大家的关注、点赞和收藏,DAY 6在凌晨也已经出啦,这是一个系列,从DAY1开始,大家可以从头看呦,有需要的可以收藏~
本文原创为CSDN博主亓官劼,原文链接为:收藏!最详细的Python全栈开发指南 看完这篇你还不会Python全栈开发 你来打我!!!,请大家支持原创,拒绝抄袭。
你可能感兴趣的:(#,Flask,python,小白都能看得懂的教程系列)
什么时候用到jupyter notebook的NBConvert
老光私享
jupyter python 人工智能 windows 机器学习
JupyterNotebook的NBConvert功能是用来将JupyterNotebook文件转换为其他格式的工具。通常情况下,我们会用到NBConvert功能来将JupyterNotebook文件转换为HTML、LaTeX、PDF或其他文本格式。这样可以方便地将JupyterNotebook分享给他人,或者将其用于报告、文章、文档或其他写作目的。要使用NBConvert功能,需要在命令行中运行
华为新系统鸿蒙手机8月发布,华为将发布鸿蒙手机操作新系统
许逸YIXU
华为新系统鸿蒙手机8月发布
华为将发布鸿蒙手机操作新系统华为正式发布鸿蒙手机操作系统,6月2日晚,华为正式发布了HarmonyOS2.0,以及一系列搭载鸿蒙OS2操作系统的智能手机、智能手表和平板电脑。“万物互联时代,没有人会是一座孤岛。”华为将发布鸿蒙手机操作新系统1“万物互联时代,没有人会是一座孤岛。”6月2日的HarmonyOS2及华为全场景新品发布会上,华为常务董事、消费者业务CEO余承东如是说。HarmonyOS是
【css酷炫效果】纯CSS实现球形阴影效果
冰夏之夜影
css 前端
【css酷炫效果】纯CSS实现球形阴影效果缘创作背景html结构css样式完整代码基础版进阶版(动态版)效果图想直接拿走的老板,链接放在这里:上传后更新缘创作随缘,不定时更新。创作背景刚看到csdn出活动了,赶时间,直接上代码,令人丧气的是:活动的领域有要求,不是发够就行,瞬间意志消沉。html结构css样式.button{background-image:url('a.gif');border-
ASSERT函数
weixin_34194359
php
assert宏的原型定义在中,其作用是假设它的条件返回错误,则终止程序运行,原型定义:#includevoidassert(intexpression);assert的作用是现计算表达式expression,假设其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用abort来终止程序执行。http://www.chongtang.me/index.php/1419提高程序健壮性
UNI-APP+VUE3+VITE+VSCode开发经验及填坑记录(持续更新ING)
集成显卡
前端 项目实践 uni-app vscode ide
uni-app是一个使用Vue.js开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。快速开发模板unibest:最好的uniapp开发框架,由uniapp+Vue3+Ts+Vite5+UnoCss+VSCode(可选webstorm)+uni插件+wot-ui(
QT引用资源qrc
我该叫什么名字好呢?
QT开发 QT qtcreator 文本编辑 控件
1.在工程文件夹下面添加一个文件夹,如images,保存图标文件.2.在工程那里新建一个qrc文件,右键选择文本编辑器打开添加如下语句:images/file_128.icoimages/open_128.icoimages/save_128.ico这样工程就能读取到这些资源,在要设置图标的控件的icon选项,选择资源文件,就可以使用图标了。3.假如是利用QTcreator编写的,那就比较简单,直
MyBatis-Plus核心功能与实战案例
千层冷面
mybatis java
MyBatis-Plus核心功能与实战案例,代码示例基于SpringBoot3.x+MyBatis-Plus3.5.3:一、MyBatis-Plus基础篇1.简介与核心优势MyBatis-Plus(MP)是MyBatis的增强工具,在保留MyBatis原生功能的基础上,通过内置通用Mapper、Service、条件构造器等,大幅简化开发。核心优势:无侵入:只做增强不做改变,可与MyBatis原生功
一文搞懂Nginx: 域名配置、SSL、HTTP转HTTPS
千层冷面
知识类 http nginx ssl linux
本文将在Centos系统下详解Nginx服务器,从概念、下载、安装、编译、配置(含域名和证书)到启动。本文先讲Nginx如何使用,然后再谈概念。一、实践1.下载下载通常有2种方式:Centos自带的包管理工具、源码编译安装(推荐,拓展性强),本文使用源码编译安装的形式下载从Nginx官网(nginx.org)下载Nginx的源代码。亦可以使用wget命令或者浏览器下载后通过FTP等方式传输到服务器
指令系统和计算机体系结构——一文解析冯·诺依曼架构
点滴汇聚江河
软考-软件设计师 架构
文章目录一、核心思想二、核心组成部分1.中央处理器(CPU)2.内存(Memory)3.输入/输出(I/O)设备4.总线(Bus)三、工作流程四、冯·诺依曼架构的局限性五、现代计算机的改进1.流水线技术(Pipeline)关键机制2.高速缓存(Cache)关键机制3.多核CPU(Multi-Core)关键挑战与解决方案4.乱序执行(Out-of-OrderExecution)关键技术5.其他关键改
大模型时代的知识焦虑
机载软件与适航
机器学习-建模算法-代理模型 人工智能 大数据
引言:浪潮之巅,焦虑暗涌大模型时代已经浩荡而来,如同奔腾的浪潮,以令人惊叹的速度重塑着世界的面貌。从智能客服的温声细语,到AI绘画的妙笔生花,再到自动驾驶的日趋成熟,大型语言模型、图像模型等人工智能技术以前所未有的姿态,渗透进我们生活的方方面面。信息获取前所未有的便捷,知识创造空前高效,人机交互焕然一新,一个充满无限可能的智能化未来似乎触手可及。然而,在这令人眼花缭乱的技术盛景之下,一股无形的焦虑
Qt爬坑笔记
klzed_
qt c++ 后端 ui
1.自定义一个QWidget的派生类,将其作为子部件并设置样式表时,需要重写paintEvent事件,否则样式表可能无效,如下所示:voidCustomWidget::paintEvent(QPaintEvent*){QStyleOptionopt;opt.init(this);QPainterp(this);
python assert()函数
欢天喜地小姐姐
python编程学习 python
1.断言函数作用断言函数是对表达式布尔值的判断,要求表达式计算值必须为真。可用于自动调试。如果表达式为假,触发异常;如果表达式为真,不会报错。2.使用assert判断数组是否相等np.array.any()和numpy.array.all()np.array.any()是或操作,任意一个元素为True,输出为True。np.array.all()是与操作,所有元素为True,输出为True。当我们
Jupyter文件转换-nbconvert命令行工具简介
madao10086+
奇技淫巧 python linux
Jupyternbconvert简介前言安装使用查考前言jupyter这个格式使用起来确实很方便,但是有的时候需要将jupyter转换为其他的格式,用的比较方便的方式就是nbconvert这个工具,这里参考的是官网的教程,做一个记录,防止自己每次要转换文件的时候都忘记这个命令行。安装安装nbconvert很简单,直接一条命令行就可以了:#pippipinstallnbconvert#condaco
GGUF量化模型技术解析与DeepSeek-R1-Distill-Llama-8B选型指南
每天三杯咖啡
人工智能
```markdown#【完全指南】GGUF量化技术与DeepSeek-R1模型选型:从入门到部署##什么是模型量化?(小白扫盲版)###1.1量化就像"模型减肥术"-**传统模型**:每个参数用32位浮点数(好比高清无损图片)-**量化模型**:用4-8位整数存储(类似手机压缩照片)-**核心原理**:`FP32→Int8/Int4`的数学映射,保留关键特征###1.2为什么要量化?|对比项|原
【LeetCode 热题100】 23. 合并 K 个升序链表的算法思路及python代码
pljnb
LeetCode热题100 算法 leetcode 链表
23.合并K个升序链表给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例1:输入:lists=[[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例2:输入:lists=[
【Leetcode刷题随笔】59 螺旋矩阵
Poor_DayDreamer
leetcode数组篇 Medium Tag leetcode 矩阵 算法
1.题目描述给定一个正整数n,生成一个包含1到n2所有元素,且元素按顺时针顺序螺旋排列的nxn正方形矩阵matrix。可结合以下原题链接阅读。原题链接:59螺旋矩阵2.解题思路本题为模拟矩阵填充过程,不需要设计算法,只要完成正确的填充过程即可。首先初始化一个nxn的二维矩阵(涉及到动态内存分配),从矩阵左上角开始往顺时针填充,关键在于填充的转角处不要重复填充,所以对于每条边都要遵循严格的统一规则,
【Leetcode刷题随笔】203移除链表元素
Poor_DayDreamer
leetcode链表篇 leetcode 链表 算法
1.题目描述题意:删除链表中等于给定值val的所有节点。示例1:输入:head=[1,2,6,3,4,5,6],val=6输出:[1,2,3,4,5]示例2:输入:head=[],val=1输出:[]示例3:输入:head=[7,7,7,7],val=7输出:[]原题链接:203移除链表元素2.解题思路由于链表本身的性质,移除链表的某个节点a,只需要将前一个节点的next指针指向a的下一个节点即可
【知识图谱】开发经验记录:CORS(跨域资源共享)问题
niuuuu16
基于知识图谱的智能助教系统 知识图谱 人工智能 经验分享 java spring boot
尝试前后端交互时出现了这样的报错:AccesstoXMLHttpRequestat'http://localhost:8080/api/courses'fromorigin'http://localhost:8081'hasbeenblockedbyCORSpolicy:No'Access-Control-Allow-Origin'headerispresentontherequestedreso
【Leetcode刷题随笔】844 比较含退格的字符串
Poor_DayDreamer
移除元素篇 字符串篇 leetcode 算法 职场和发展
1.题目描述给定s和t两个字符串,比较s和t是否在删除所有由#字符表示的退格操作后相等。退格操作会删除其前面(不包括#本身)的一个字符,如果前面没有字符则忽略该#。如果字符串的末尾有多个退格符,它们会相互抵消,直到没有退格符剩余或者所有字符都被删除。示例1:输入:s=“ab#c”,t=“ad#c”输出:true解释:s和t都会变成“ac”,因为#前面的b和d都被删除。示例2:输入:s=“ab##”
【Leetcode刷题随笔】2765最长交替子数组
Poor_DayDreamer
leetcode数组篇 leetcode 算法 职场和发展
1.题目描述:该题目标是在一个整数数组nums中寻找最长的“交替子数组”。这种交替子数组的特点是:其元素按照“递增1,递减1,递增1…”的模式循环排列,且子数组的长度必须大于1,例如数组nums=[2,3,4,3,4],交替子数组有[2,3],[3,4],[3,4,3]和[3,4,3,4]。最长的子数组为[3,4,3,4],长度为4。详细题目描述见原题:原题。2.1解题思路一(双层循环):这道题有
含光热电站、有机有机朗肯循环、P2G的综合能源优化调度(Matlab代码实现)
创新优化代码学习
能源 matlab 前端
个人主页欢迎来到本博客❤️❤️博主优势:博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳️座右铭:行百里者,半于九十。本文目录如下:目录1概述含光热电站、有机朗肯循环与P2G的综合能源优化调度研究一、技术基础与系统作用二、多技术协同机制三、优化调度模型构建四、典型案例与仿真分析五、未来研究方向结论2运行结果3参考文献4Matlab代码实现1概述光热发电(concentratingsolarp
LeetCode刷题笔记
小李李李李腊八
leetcode 算法 java
leetcode_01两数之和斐波那契数列三个数最大乘积反转链表x的平方根环形列表LeetCode随笔两数之和给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。暴力法记录下数组第一个数值,对数组进行循环,将之后的值
【计算机系统概论】计算机框架是什么?冯诺依曼架构为什么重要?我们要记住冯·诺依曼架构的什么?
爱吃羊的老虎
计算机系统 架构 系统架构 计算机网络
什么是计算机的框架?计算机的框架(架构)就是计算机工作的基本规则,规定了它如何存储数据、如何执行指令、如何传输信息。可以理解成是计算机的大脑结构,它决定了一台计算机的工作方式。如果把计算机比作一个工厂,那么架构就像是生产流程,比如:存储区(仓库):存放数据和指令。控制中心(调度室):决定接下来做什么。加工车间(计算单元):执行计算和逻辑处理。运输系统(总线):负责不同部件之间的信息传输。冯·诺依曼
力扣Hot100——136. 只出现一次的数字
飞奔的马里奥
leetcode 算法 职场和发展
难点在于时间与空间复杂度的要求,一般遇到这样的限制,就要考虑使用位运算,位运算效率最高了。异或当且仅当两个输入值不同时,异或运算输出为真(1),否则输出为假(0),即“同为0,异为1”。这是针对二进制运算的规则,整数进行异或运算,需要转换为二进制,一样遵循这个运算规则。异或的运算律:交换律:p⊕q=q⊕p结合律:p⊕(q⊕r)=(p⊕q)⊕r恒等律:p⊕0=p归零律:p⊕p=0对合运算:p⊕q⊕q
PyCharm的终端(terminal)中进入指定conda虚拟环境
我不是程序员
软件开发工作基础知识 pycharm conda linux
参考这篇博文:PyCharm的终端(terminal)中进入指定conda虚拟环境_pycharm配置conda终端-CSDN博客
stm32基于HAL库的串口UART中断接收不定长数据代码实现
ls20010901
stm32 单片机 mcu
总体分析:代码使用的串口USART1,GPIO的复用引脚分别是:PA9复用为RX引脚;PA10复用为TX引脚。数据接收标志符为"\r\n"即回车按键按下,当接收到\r\n时接收停止。接收数据缓冲区只能容纳一个字节数据,设置的接收一个字节数据产生一次接收中断,在中断回调函数中进行串口接收协议的编写。代码现象:将接受的数据重新发送至串口进行回显。代码实现uart.h#ifndef__USART_H#d
MySQL请求处理全流程深度解析:从SQL语句到数据返回
longdong7889
mysql sql adb
MySQL请求处理全流程深度解析:从SQL语句到数据返回一、MySQL架构全景图MySQL采用经典的C/S架构和分层设计,其核心模块协同工作流程如下:客户端连接管理器查询解析器查询优化器执行引擎存储引擎磁盘存储各层核心职责:连接层:管理客户端连接、权限验证服务层:SQL解析、优化、内置函数实现存储引擎层:数据存储与索引管理(如InnoDB)文件系统层:日志文件、数据文件存储二、请求处理七步详解步骤
每日新闻掌握【2025年3月20日 星期四】
cdmt
每日新闻掌握 科技
2025年3月20日星期四农历二月廿一大公司/大事件住建部:坚决稳住楼市,推动房地产市场止跌回稳近日,中共住房和城乡建设部党组召开理论学习中心组学习(扩大)会议。会议要求,要持续推进城市更新,坚持问题导向和目标导向,开展城市体检,找准人民群众急难愁盼问题和城市发展短板弱项,下功夫实施一批惠民生、防风险、促发展的更新项目。要坚决稳住楼市,持续巩固“四个取消、四个降低、两个增加”房地产政策“组合拳”效
本地源代码运行bun install时报错
星火燎猿
C# 疑难杂症处理方案 Bun Bun.js
最近使用Ubuntu系统运行Bun的时候报,Failedtospawnscriptinstallduetoerroros.linux.errno.generic.E.PERMPERM的错误,查看官方文档也没有这个错误描述,最终找到解决方案进行分享。报错问题如下:errorloadingcurrentdirectoryInstalling[2637/2230]error:failedtospawnl
关于HAL库STM32中断接收丢失第一个字节的问题
隔夜秀才
STM32 stm32
被HAL库中断接收丢失首字节的这个问题折磨了四天了,今天终于解决了,觉得有必要记录一下。问题是这样的:刚开始上电后,用串口助手给串口1发送一帧数据(有帧头帧尾的),正常接收,继续发送,也正常接收,之后当串口4中断接收数据完成后,再用串口助手给串口1发送一帧数据的时候,发现首字节会丢失无法接收到,如果不让串口4进中断接收,就不会这样。网上搜罗查阅了很多资料,什么RXNE、ORE、TC问题都试过了,一
mongodb3.03开启认证
21jhf
mongodb
下载了最新mongodb3.03版本,当使用--auth 参数命令行开启mongodb用户认证时遇到很多问题,现总结如下:
(百度上搜到的基本都是老版本的,看到db.addUser的就是,请忽略)
Windows下我做了一个bat文件,用来启动mongodb,命令行如下:
mongod --dbpath db\data --port 27017 --directoryperdb --logp
【Spark103】Task not serializable
bit1129
Serializable
Task not serializable是Spark开发过程最令人头疼的问题之一,这里记录下出现这个问题的两个实例,一个是自己遇到的,另一个是stackoverflow上看到。等有时间了再仔细探究出现Task not serialiazable的各种原因以及出现问题后如何快速定位问题的所在,至少目前阶段碰到此类问题,没有什么章法
1.
package spark.exampl
你所熟知的 LRU(最近最少使用)
dalan_123
java
关于LRU这个名词在很多地方或听说,或使用,接下来看下lru缓存回收的实现
1、大体的想法
a、查询出最近最晚使用的项
b、给最近的使用的项做标记
通过使用链表就可以完成这两个操作,关于最近最少使用的项只需要返回链表的尾部;标记最近使用的项,只需要将该项移除并放置到头部,那么难点就出现 你如何能够快速在链表定位对应的该项?
这时候多
Javascript 跨域
周凡杨
JavaScript jsonp 跨域 cross-domain
 
linux下安装apache服务器
g21121
apache
安装apache
下载windows版本apache,下载地址:http://httpd.apache.org/download.cgi
1.windows下安装apache
Windows下安装apache比较简单,注意选择路径和端口即可,这里就不再赘述了。 2.linux下安装apache:
下载之后上传到linux的相关目录,这里指定为/home/apach
FineReport的JS编辑框和URL地址栏语法简介
老A不折腾
finereport web报表 报表软件 语法总结
JS编辑框:
1.FineReport的js。
作为一款BS产品,browser端的JavaScript是必不可少的。
FineReport中的js是已经调用了finereport.js的。
大家知道,预览报表时,报表servlet会将cpt模板转为html,在这个html的head头部中会引入FineReport的js,这个finereport.js中包含了许多内置的fun
根据STATUS信息对MySQL进行优化
墙头上一根草
status
mysql 查看当前正在执行的操作,即正在执行的sql语句的方法为:
show processlist 命令
mysql> show global status;可以列出MySQL服务器运行各种状态值,我个人较喜欢的用法是show status like '查询值%';一、慢查询mysql> show variab
我的spring学习笔记7-Spring的Bean配置文件给Bean定义别名
aijuans
Spring 3
本文介绍如何给Spring的Bean配置文件的Bean定义别名?
原始的
<bean id="business" class="onlyfun.caterpillar.device.Business">
<property name="writer">
<ref b
高性能mysql 之 性能剖析
annan211
性能 mysql mysql 性能剖析 剖析
1 定义性能优化
mysql服务器性能,此处定义为 响应时间。
在解释性能优化之前,先来消除一个误解,很多人认为,性能优化就是降低cpu的利用率或者减少对资源的使用。
这是一个陷阱。
资源时用来消耗并用来工作的,所以有时候消耗更多的资源能够加快查询速度,保持cpu忙绿,这是必要的。很多时候发现
编译进了新版本的InnoDB之后,cpu利用率上升的很厉害,这并不
主外键和索引唯一性约束
百合不是茶
索引 唯一性约束 主外键约束 联机删除
目标;第一步;创建两张表 用户表和文章表
第二步;发表文章
1,建表;
---用户表 BlogUsers
--userID唯一的
--userName
--pwd
--sex
create
线程的调度
bijian1013
java 多线程 thread 线程的调度 java多线程
1. Java提供一个线程调度程序来监控程序中启动后进入可运行状态的所有线程。线程调度程序按照线程的优先级决定应调度哪些线程来执行。
2. 多数线程的调度是抢占式的(即我想中断程序运行就中断,不需要和将被中断的程序协商)
a) 
查看日志常用命令
bijian1013
linux 命令 unix
一.日志查找方法,可以用通配符查某台主机上的所有服务器grep "关键字" /wls/applogs/custom-*/error.log
二.查看日志常用命令1.grep '关键字' error.log:在error.log中搜索'关键字'2.grep -C10 '关键字' error.log:显示关键字前后10行记录3.grep '关键字' error.l
【持久化框架MyBatis3一】MyBatis版HelloWorld
bit1129
helloworld
MyBatis这个系列的文章,主要参考《Java Persistence with MyBatis 3》。
样例数据
本文以MySQL数据库为例,建立一个STUDENTS表,插入两条数据,然后进行单表的增删改查
CREATE TABLE STUDENTS
(
stud_id int(11) NOT NULL AUTO_INCREMENT,
【Hadoop十五】Hadoop Counter
bit1129
hadoop
1. 只有Map任务的Map Reduce Job
File System Counters
FILE: Number of bytes read=3629530
FILE: Number of bytes written=98312
FILE: Number of read operations=0
FILE: Number of lar
解决Tomcat数据连接池无法释放
ronin47
tomcat 连接池 优化
近段时间,公司的检测中心报表系统(SMC)的开发人员时不时找到我,说用户老是出现无法登录的情况。前些日子因为手头上 有Jboss集群的测试工作,发现用户不能登录时,都是在Tomcat中将这个项目Reload一下就好了,不过只是治标而已,因为大概几个小时之后又会 再次出现无法登录的情况。
今天上午,开发人员小毛又找到我,要我协助将这个问题根治一下,拖太久用户难保不投诉。
简单分析了一
java-75-二叉树两结点的最低共同父结点
bylijinnan
java
import java.util.LinkedList;
import java.util.List;
import ljn.help.*;
public class BTreeLowestParentOfTwoNodes {
public static void main(String[] args) {
/*
* node data is stored in
行业垂直搜索引擎网页抓取项目
carlwu
Lucene Nutch Heritrix Solr
公司有一个搜索引擎项目,希望各路高人有空来帮忙指导,谢谢!
这是详细需求:
(1) 通过提供的网站地址(大概100-200个网站),网页抓取程序能不断抓取网页和其它类型的文件(如Excel、PDF、Word、ppt及zip类型),并且程序能够根据事先提供的规则,过滤掉不相干的下载内容。
(2) 程序能够搜索这些抓取的内容,并能对这些抓取文件按照油田名进行分类,然后放到服务器不同的目录中。
[通讯与服务]在总带宽资源没有大幅增加之前,不适宜大幅度降低资费
comsci
资源
降低通讯服务资费,就意味着有更多的用户进入,就意味着通讯服务提供商要接待和服务更多的用户,在总体运维成本没有由于技术升级而大幅下降的情况下,这种降低资费的行为将导致每个用户的平均带宽不断下降,而享受到的服务质量也在下降,这对用户和服务商都是不利的。。。。。。。。
&nbs
Java时区转换及时间格式
Cwind
java
本文介绍Java API 中 Date, Calendar, TimeZone和DateFormat的使用,以及不同时区时间相互转化的方法和原理。
问题描述:
向处于不同时区的服务器发请求时需要考虑时区转换的问题。譬如,服务器位于东八区(北京时间,GMT+8:00),而身处东四区的用户想要查询当天的销售记录。则需把东四区的“今天”这个时间范围转换为服务器所在时区的时间范围。
readonly,只读,不可用
dashuaifu
js jsp disable readOnly readOnly
readOnly 和 readonly 不同,在做js开发时一定要注意函数大小写和jsp黄线的警告!!!我就经历过这么一件事:
使用readOnly在某些浏览器或同一浏览器不同版本有的可以实现“只读”功能,有的就不行,而且函数readOnly有黄线警告!!!就这样被折磨了不短时间!!!(期间使用过disable函数,但是发现disable函数之后后台接收不到前台的的数据!!!)
LABjs、RequireJS、SeaJS 介绍
dcj3sjt126com
js Web
LABjs 的核心是 LAB(Loading and Blocking):Loading 指异步并行加载,Blocking 是指同步等待执行。LABjs 通过优雅的语法(script 和 wait)实现了这两大特性,核心价值是性能优化。LABjs 是一个文件加载器。RequireJS 和 SeaJS 则是模块加载器,倡导的是一种模块化开发理念,核心价值是让 JavaScript 的模块化开发变得更
[应用结构]入口脚本
dcj3sjt126com
PHP yii2
入口脚本
入口脚本是应用启动流程中的第一环,一个应用(不管是网页应用还是控制台应用)只有一个入口脚本。终端用户的请求通过入口脚本实例化应用并将将请求转发到应用。
Web 应用的入口脚本必须放在终端用户能够访问的目录下,通常命名为 index.php,也可以使用 Web 服务器能定位到的其他名称。
控制台应用的入口脚本一般在应用根目录下命名为 yii(后缀为.php),该文
haoop shell命令
eksliang
hadoop hadoop shell
cat
chgrp
chmod
chown
copyFromLocal
copyToLocal
cp
du
dus
expunge
get
getmerge
ls
lsr
mkdir
movefromLocal
mv
put
rm
rmr
setrep
stat
tail
test
text
MultiStateView不同的状态下显示不同的界面
gundumw100
android
只要将指定的view放在该控件里面,可以该view在不同的状态下显示不同的界面,这对ListView很有用,比如加载界面,空白界面,错误界面。而且这些见面由你指定布局,非常灵活。
PS:ListView虽然可以设置一个EmptyView,但使用起来不方便,不灵活,有点累赘。
<com.kennyc.view.MultiStateView xmlns:android=&qu
jQuery实现页面内锚点平滑跳转
ini
JavaScript html jquery html5 css
平时我们做导航滚动到内容都是通过锚点来做,刷的一下就直接跳到内容了,没有一丝的滚动效果,而且 url 链接最后会有“小尾巴”,就像#keleyi,今天我就介绍一款 jquery 做的滚动的特效,既可以设置滚动速度,又可以在 url 链接上没有“小尾巴”。
效果体验:http://keleyi.com/keleyi/phtml/jqtexiao/37.htmHTML文件代码:
&
kafka offset迁移
kane_xie
kafka
在早前的kafka版本中(0.8.0),offset是被存储在zookeeper中的。
到当前版本(0.8.2)为止,kafka同时支持offset存储在zookeeper和offset manager(broker)中。
从官方的说明来看,未来offset的zookeeper存储将会被弃用。因此现有的基于kafka的项目如果今后计划保持更新的话,可以考虑在合适
android > 搭建 cordova 环境
mft8899
android
1 , 安装 node.js
http://nodejs.org
node -v 查看版本
2, 安装 npm
可以先从 https://github.com/isaacs/npm/tags 下载 源码 解压到
java封装的比较器,比较是否全相同,获取不同字段名字
qifeifei
非常实用的java比较器,贴上代码:
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
i
记录一些函数用法
.Aky.
位运算 PHP 数据库 函数 IP
高手们照旧忽略。
想弄个全天朝IP段数据库,找了个今天最新更新的国内所有运营商IP段,copy到文件,用文件函数,字符串函数把玩下。分割出startIp和endIp这样格式写入.txt文件,直接用phpmyadmin导入.csv文件的形式导入。(生命在于折腾,也许你们觉得我傻X,直接下载人家弄好的导入不就可以,做自己的菜鸟,让别人去说吧)
当然用到了ip2long()函数把字符串转为整型数
sublime text 3 rust
wudixiaotie
Sublime Text
1.sublime text 3 => install package => Rust
2.cd ~/.config/sublime-text-3/Packages
3.mkdir rust
4.git clone https://github.com/sp0/rust-style
5.cd rust-style
6.cargo build --release
7.ctrl