使用Python+Flask开发博客项目,并实现内网穿透_flask框架内网攻击

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

from flask import render_template, redirect, url_for, request, flash, session
from front_back import front
from modles.dbmodels import User, db
import hashlib
from utils import login_check

@front.route(‘/login’,methods=[‘GET’,‘POST’])
def login():
if request.method==‘GET’:
return render_template(‘login.html’)
elif request.method==‘POST’:
username=request.form.get(‘username’)
password=request.form.get(‘password’)
user=User.query.filter_by(username=username,password=password).first()
print(user)
if user:
session[‘user’]=username
print(session[‘user’])
flash(‘登录成功’)
return redirect(url_for(‘front.index’))
else:
flash(‘登录失败’)
return redirect(url_for(‘front.login’))

@front.route(‘/register’,methods=[‘GET’,‘POST’])
def register():
# 如果是get请求的话就返回页面,post请求的话就接收表单数据
if request.method == ‘GET’:
return render_template(“register.html”)
elif request.method == ‘POST’:
username = request.form.get(‘username’)
password = request.form.get(‘password’)
check_password = request.form.get(‘check_password’)

        if username and password and password == check_password:
            md5 = hashlib.md5()
            md5.update(password.encode('utf-8'))
            user = User()

            user.username = username
            # 使用hashlib加密密码再存入数据库,拿到md5.hexdigest()加密后的密码
            user.password = md5.hexdigest()
            user.password=password
            print(username,password)
        try:
           db.session.add(user)
           db.session.commit()
           flash('注册成功,欢迎访问我的个人博客!')
           return redirect(url_for('front.register'))
        except Exception:
           flash('注册失败,请检查密码后重新注册')
           return redirect(url_for('front.register'))
    else:
         flash('注册失败')
         return redirect(url_for('front.register'))

### 2.首页文章展示模块


这个模块合并了分页的功能,当发布文章的数量在当前页面无法展示完全的时候就使用增加分页的方式进行展示,并通过bootstrap提供的分页导航栏进行编写。使用bootstrap进行前端页面的开发,可以让我们在不具备很好的前端知识的情况下也可以开发出精美的页面。


![在这里插入图片描述](https://img-blog.csdnimg.cn/24d56f21a4784db2b60de4a231421c98.png)



@front.route(‘/index’)
@front.route(‘/’)

@login_required

def index():
page=int(request.args.get(‘page’,default=1)) #找到传入的?page=? 参数,没有的话默认就是1,因为传回来的是字符串,所以需要转化成int
#pre_page=? 这个是设置每一页最多显示几条数据
paginate=Article.query.order_by(Article.create_time.desc()).paginate(page=page,per_page=5)
article=paginate.items
groups=ArticleGroup.query.all() #拿到模型所有的数据
return render_template(“index.html”,groups=groups,article=article,paginate=paginate)


### 3.文章详情展示模块


这个模块主要是拿到文章模型的全部时间并进行展示,并通过文章的id进行精准展示


![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H3NWBcYU-1636098859836)(picture/image-20211105153111194.png)]](https://img-blog.csdnimg.cn/aafb35456e374814877977f6906eca31.png)



@front.route(‘/article_detail/int:article\_id’)

@login_required

def article_detail(article_id):
article=Article.query.get(article_id)
groups=ArticleGroup.query.all() #拿到模型所有的数据
return render_template(“article_detail.html”,groups=groups,article=article)


### 4.文章发布模块


这个模块引入了md格式的文章编写模块,用户可以根据md的语法进行文章发编写与发布,同时增加右边的语法预览框方便用户看到文章的展示情况


![在这里插入图片描述](https://img-blog.csdnimg.cn/f8b6159fd0ae4b63b0a71bd265619ed2.png)



@front.route(‘/add_article’,methods=[‘GET’,‘POST’])

@login_required

def add_article():
if request.method==‘GET’:
groups=ArticleGroup.query.all() #拿到模型所有的数据
return render_template(“add_article.html”,groups=groups)
elif request.method==‘POST’:
title=request.form.get(‘title’)
content=request.form.get(‘content’)
gid=request.form.get(‘gid’)

    user=User.query.filter_by(username=session.get('user')).first()
    uid=user.id
    # 获取当前时间,从datetime这个库里面
    create_time=datetime.datetime.now()

    article=Article()
    article.title=title
    article.content=content
    article.gid=gid
    article.uid=uid
    article.create_time=create_time
    print(user,title,content,gid,uid,create_time)
    try:
        db.session.add(article)
        db.session.commit()
        flash('添加%s成功' % title)
        return redirect(url_for('front.add\_article'))
    except Exception:
        flash('添加%s失败' % title)
        return redirect(url_for('front.add\_article'))

### 5.文章添加分类模块


这个模块,用户可以自己输入要增加的分组的名称,之后可以选择分组要展现的颜色进行展示,并把相关数据存入数据库


![在这里插入图片描述](https://img-blog.csdnimg.cn/0ed3dd5049084ce1ae03765b6188d52e.png)



@front.route(“/add_group”,methods=[‘GET’,‘POST’])
def add_group():
if request.method==‘GET’:
groups = ArticleGroup.query.all()
colors=[‘default’,‘primary’,‘success’,‘into’,‘warning’,‘danger’]
return render_template(‘add_group.html’,colors=colors,groups=groups)
elif request.method==‘POST’:
name=request.form.get(‘name’)
color=request.form.get(‘color’)
group=ArticleGroup()
group.name=name
group.color=color
try:
db.session.add(group)
db.session.commit()
flash(“添加分组成功”)
return redirect(url_for(‘front.manage’))
except Exception:
flash(“添加失败”)
return redirect(url_for(‘front.manage’))


### 6.文章分类管理模块


这个模块主要是对用户编辑的分组与颜色进行编辑与删除的管理功能


![在这里插入图片描述](https://img-blog.csdnimg.cn/e7e73f7a6e5441fb9a93ab23b861b8e0.png)



@front.route(“/article_group_manage”)

def article_group_manage():
groups = ArticleGroup.query.all()
return render_template(‘article_group_mange.html’,groups=groups)
@front.route(‘/edit_group/int:gid’,methods=[‘GET’,‘POST’])
def edit_group(gid):
if request.method==‘GET’:
groups=ArticleGroup.query.all()
#找到通过id找到分组
group=ArticleGroup.query.get(gid)
colors = [‘default’, ‘primary’, ‘success’, ‘into’, ‘warning’, ‘danger’]
return render_template(‘edit_group.html’,group=group,colors=colors,groups=groups)
elif request.method==‘POST’:
name=request.form.get(“name”)
color=request.form.get(“color”)

    group=ArticleGroup.query.get(gid)
    group.name=name
    group.color=color
    try:
        db.session.add(group)
        db.session.commit()
        flash("修改成功")
        return redirect(url_for("front.article\_group\_manage"))
    except Exception:
        flash("修改失败")
        return redirect(url_for("front.article\_group\_mange"))

删除的 视图函数

@front.route(‘/delete_group/int:gid’)
def delete_group(gid):
group=ArticleGroup.query.get(gid)
try:
db.session.delete(group)
db.session.commit()
flash(‘删除%s成功’ % group.name)
return redirect(url_for(“front.article_group_manage”))
except Exception:
flash(‘删除%s失败’ % group.name)
return redirect(url_for(“front.article_group_manage”))


### 7.文章管理模块


这个模块提供了文章的管理功能,用户如果对已经发布的文章有继续改进的想法可以在这个模块进行编辑,并对文章进行删除或者编辑重新发布的操作。


![在这里插入图片描述](https://img-blog.csdnimg.cn/6372646abe3845028a7064d253e077a5.png)





@front.route(‘/edit_article/int:article\_id’,methods=[‘GET’,‘POST’])
def edit_article(article_id):
if request.method==‘GET’:
# 拿到文章内容
article=Article.query.get(article_id)
groups=ArticleGroup.query.all()
return render_template(‘edit_article.html’,groups=groups,article=article)
elif request.method==‘POST’:
title=request.form.get(“title”)
content=request.form.get(“content”)
gid=request.form.get(“gid”)
update_time=datetime.datetime.now()

    article=Article.query.get(article_id)
    article.title=title
    article.content=content
    print(content)
    article.gid=gid
    article.update_time=update_time

    try:
        db.session.commit()
        return redirect(url_for("front.article\_manage"))
    except Exception:
        flash("修改%s失败" % title)
        return redirect(url_for("front.article\_manage"))

@front.route(‘/delete_article/int:article\_id’)
def delete_article(article_id):
article=Article.query.get(article_id)
try:
db.session.delete(article)
db.session.commit()
flash(“删除文章%s成功”%article.title)
return redirect(url_for(“front.article_manage”))
except Exception:
flash(“删除文章%s失败”%article.title)
return redirect(url_for(“front.article_manage”))


### 8.用户个人信息注销模块


通过这个模块用户可以一键注销当前登录的账号,并回到登录页面



注销登录,在base写上

@front.route(‘/logout’)
def logout():

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

[外链图片转存中…(img-YqbWi1PT-1715728540306)]
[外链图片转存中…(img-SaIIEKFA-1715728540306)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值