相关文章推荐
刚毅的围巾  ·  PΛNDΛER×联想拯救者 ...·  1 年前    · 
纯真的杯子  ·  #穿书# ...·  1 年前    · 
高大的蛋挞  ·  iPhone 拍照 Live ...·  1 年前    · 
腼腆的跑步鞋  ·  excel vba 调用摄像头 - CSDN文库·  1 年前    · 
知识渊博的草稿本  ·  人文传播学院与海南省广播电视总台开展座谈交流 ...·  2 年前    · 
Code  ›  基于python的django框架博客论坛交流系统_基于django的个人博客论坛_秋_2105917280的博客
python django string bean
https://blog.csdn.net/BYSJLG/article/details/127756276
另类的核桃
3 年前
    • Java实战项目专栏
    • Python实战项目专栏
    • 安卓实战项目专栏
    • 微信小程序实战项目专栏
  • 一、开发介绍
    • 1.1 开发环境
  • 二、系统介绍
    • 2.1图片展示
    • **3.1.Mybatis-Plus工具类-部分代码如下:**
    • 3.3.查询参数工具类-部分代码如下:
  • 总结
  • 有问题评论区交流
    • Java实战项目专栏
    • Python实战项目专栏
    • 安卓实战项目专栏
    • 微信小程序实战专栏

    一、开发介绍

    1.1 开发环境

    • 开发语言:Python
    • 数据库:MySQL
    • 系统架构:B/S
    • 后端:Django
    • 前端:Vue+HTML+CSS+JavaScript+jQuery
    • 工具:PyCharm

    二、系统介绍

    2.1图片展示

    用户登陆页面
    在这里插入图片描述

    前端页面功能:首页、文章信息、系统公告、个人中心、后台管理、在线客服
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    管理员后台页面功能:
    首页,个人中心,博主管理、文章分类管理、文章信息管理、举报投诉管理、系统管理

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    用户后台管理页面功能:
    注册、登录、首页、个人中心、文章信息管理、举报投诉管理、我的收藏管理

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    3.1.Mybatis-Plus工具类-部分代码如下:

    * Mybatis-Plus工具类 public class MPUtil { public static final char UNDERLINE = '_' ; //mybatis plus allEQ 表达式转换 public static Map allEQMapPre ( Object bean , String pre ) { Map < String , Object > map = BeanUtil . beanToMap ( bean ) ; return camelToUnderlineMap ( map , pre ) ; //mybatis plus allEQ 表达式转换 public static Map allEQMap ( Object bean ) { Map < String , Object > map = BeanUtil . beanToMap ( bean ) ; return camelToUnderlineMap ( map , "" ) ; public static Wrapper allLikePre ( Wrapper wrapper , Object bean , String pre ) { Map < String , Object > map = BeanUtil . beanToMap ( bean ) ; Map result = camelToUnderlineMap ( map , pre ) ; return genLike ( wrapper , result ) ; public static Wrapper allLike ( Wrapper wrapper , Object bean ) { Map result = BeanUtil . beanToMap ( bean , true , true ) ; return genLike ( wrapper , result ) ; public static Wrapper genLike ( Wrapper wrapper , Map param ) { Iterator < Map . Entry < String , Object > > it = param . entrySet ( ) . iterator ( ) ; int i = 0 ; while ( it . hasNext ( ) ) { if ( i > 0 ) wrapper . and ( ) ; Map . Entry < String , Object > entry = it . next ( ) ; String key = entry . getKey ( ) ; String value = ( String ) entry . getValue ( ) ; wrapper . like ( key , value ) ; i ++ ; return wrapper ; public static Wrapper likeOrEq ( Wrapper wrapper , Object bean ) { Map result = BeanUtil . beanToMap ( bean , true , true ) ; return genLikeOrEq ( wrapper , result ) ; public static Wrapper genLikeOrEq ( Wrapper wrapper , Map param ) { Iterator < Map . Entry < String , Object > > it = param . entrySet ( ) . iterator ( ) ; int i = 0 ; while ( it . hasNext ( ) ) { if ( i > 0 ) wrapper . and ( ) ; Map . Entry < String , Object > entry = it . next ( ) ; String key = entry . getKey ( ) ; if ( entry . getValue ( ) . toString ( ) . contains ( "%" ) ) { wrapper . like ( key , entry . getValue ( ) . toString ( ) . replace ( "%" , "" ) ) ; } else { wrapper . eq ( key , entry . getValue ( ) ) ; i ++ ; return wrapper ; public static Wrapper allEq ( Wrapper wrapper , Object bean ) { Map result = BeanUtil . beanToMap ( bean , true , true ) ; return genEq ( wrapper , result ) ; public static Wrapper genEq ( Wrapper wrapper , Map param ) { Iterator < Map . Entry < String , Object > > it = param . entrySet ( ) . iterator ( ) ; int i = 0 ; while ( it . hasNext ( ) ) { if ( i > 0 ) wrapper . and ( ) ; Map . Entry < String , Object > entry = it . next ( ) ; String key = entry . getKey ( ) ; wrapper . eq ( key , entry . getValue ( ) ) ; i ++ ; return wrapper ; public static Wrapper between ( Wrapper wrapper , Map < String , Object > params ) { for ( String key : params . keySet ( ) ) { String columnName = "" ; if ( key . endsWith ( "_start" ) ) { columnName = key . substring ( 0 , key . indexOf ( "_start" ) ) ; if ( StringUtils . isNotBlank ( params . get ( key ) . toString ( ) ) ) { wrapper . ge ( columnName , params . get ( key ) ) ; if ( key . endsWith ( "_end" ) ) { columnName = key . substring ( 0 , key . indexOf ( "_end" ) ) ; if ( StringUtils . isNotBlank ( params . get ( key ) . toString ( ) ) ) { wrapper . le ( columnName , params . get ( key ) ) ; return wrapper ; public static Wrapper sort ( Wrapper wrapper , Map < String , Object > params ) { String order = "" ; if ( params . get ( "order" ) != null && StringUtils . isNotBlank ( params . get ( "order" ) . toString ( ) ) ) { order = params . get ( "order" ) . toString ( ) ; if ( params . get ( "sort" ) != null && StringUtils . isNotBlank ( params . get ( "sort" ) . toString ( ) ) ) { if ( order . equalsIgnoreCase ( "desc" ) ) { wrapper . orderDesc ( Arrays . asList ( params . get ( "sort" ) ) ) ; } else { wrapper . orderAsc ( Arrays . asList ( params . get ( "sort" ) ) ) ; return wrapper ; * 驼峰格式字符串转换为下划线格式字符串 * @param param * @return public static String camelToUnderline ( String param ) { if ( param == null || "" . equals ( param . trim ( ) ) ) { return "" ; int len = param . length ( ) ; StringBuilder sb = new StringBuilder ( len ) ; for ( int i = 0 ; i < len ; i ++ ) { char c = param . charAt ( i ) ; if ( Character . isUpperCase ( c ) ) { sb . append ( UNDERLINE ) ; sb . append ( Character . toLowerCase ( c ) ) ; } else { sb . append ( c ) ; return sb . toString ( ) ; public static void main ( String [ ] ages ) { System . out . println ( camelToUnderline ( "ABCddfANM" ) ) ; public static Map camelToUnderlineMap ( Map param , String pre ) { Map < String , Object > newMap = new HashMap < String , Object > ( ) ; Iterator < Map . Entry < String , Object > > it = param . entrySet ( ) . iterator ( ) ; while ( it . hasNext ( ) ) { Map . Entry < String , Object > entry = it . next ( ) ; String key = entry . getKey ( ) ; String newKey = camelToUnderline ( key ) ; if ( pre . endsWith ( "." ) ) { newMap . put ( pre + newKey , entry . getValue ( ) ) ; } else if ( StringUtils . isEmpty ( pre ) ) { newMap . put ( newKey , entry . getValue ( ) ) ; } else { newMap . put ( pre + "." + newKey , entry . getValue ( ) ) ; return newMap ; 3.2 . 校验工具类 - 部分代码如下: * hibernate-validator校验工具类 public class ValidatorUtils { private static Validator validator ; static { validator = Validation . buildDefaultValidatorFactory ( ) . getValidator ( ) ; * 校验对象 * @param object 待校验对象 * @param groups 待校验的组 * @throws EIException 校验不通过,则报EIException异常 public static void validateEntity ( Object object , Class < ? > .. . groups ) throws EIException { Set < ConstraintViolation < Object > > constraintViolations = validator . validate ( object , groups ) ; if ( ! constraintViolations . isEmpty ( ) ) { ConstraintViolation < Object > constraint = ( ConstraintViolation < Object > ) constraintViolations . iterator ( ) . next ( ) ; throw new EIException ( constraint . getMessage ( ) ) ;

    3.3.查询参数工具类-部分代码如下:

    * 查询参数 public class Query < T > extends LinkedHashMap < String , Object > { private static final long serialVersionUID = 1L ; * mybatis-plus分页参数 private Page < T > page ; * 当前页码 private int currPage = 1 ; * 每页条数 private int limit = 10 ; public Query ( JQPageInfo pageInfo ) { //分页参数 if ( pageInfo . getPage ( ) != null ) { currPage = pageInfo . getPage ( ) ; if ( pageInfo . getLimit ( ) != null ) { limit = pageInfo . getLimit ( ) ; //防止SQL注入(因为sidx、order是通过拼接SQL实现排序的,会有SQL注入风险) String sidx = SQLFilter . sqlInject ( pageInfo . getSidx ( ) ) ; String order = SQLFilter . sqlInject ( pageInfo . getOrder ( ) ) ; //mybatis-plus分页 this . page = new Page < > ( currPage , limit ) ; if ( StringUtils . isNotBlank ( sidx ) && StringUtils . isNotBlank ( order ) ) { this . page . setOrderByField ( sidx ) ; this . page . setAsc ( "ASC" . equalsIgnoreCase ( order ) ) ; public Query ( Map < String , Object > params ) { this . putAll ( params ) ; //分页参数 if ( params . get ( "page" ) != null ) { currPage = Integer . parseInt ( ( String ) params . get ( "page" ) ) ; if ( params . get ( "limit" ) != null ) { limit = Integer . parseInt ( ( String ) params . get ( "limit" ) ) ; this . put ( "offset" , ( currPage - 1 ) * limit ) ; this . put ( "page" , currPage ) ; this . put ( "limit" , limit ) ; //防止SQL注入(因为sidx、order是通过拼接SQL实现排序的,会有SQL注入风险) String sidx = SQLFilter . sqlInject ( ( String ) params . get ( "sidx" ) ) ; String order = SQLFilter . sqlInject ( ( String ) params . get ( "order" ) ) ; this . put ( "sidx" , sidx ) ; this . put ( "order" , order ) ; //mybatis-plus分页 this . page = new Page < > ( currPage , limit ) ; if ( StringUtils . isNotBlank ( sidx ) && StringUtils . isNotBlank ( order ) ) { this . page . setOrderByField ( sidx ) ; this . page . setAsc ( "ASC" . equalsIgnoreCase ( order ) ) ; public Page < T > getPage ( ) { return page ; public int getCurrPage ( ) { return currPage ; public int getLimit ( ) { return limit ;

    大家可以帮忙点赞、收藏、关注、评论啦

    有问题评论区交流

    精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻

    Java实战项目专栏

    Python实战项目专栏

    安卓实战项目专栏

    微信小程序实战专栏

    因个人原因,目前开发暂停,坑挖了目前没时间填,,实在意料之外,目前已完成的功能大部分都是完整的,项目建议仅作 交流 学习。 新坑项目地址: : ,最初:golang,gin,gormV2,go-redis,websocket前端:react hooks,antd v4 demo地址: : 每两小时还原数据 管理员账号:admin密码admin @ 1234 持续打造样例 特色功能开发进度 基于RBAC的用户权限管理 资产扫描功能(目前只能扫描linux服务器) 持续构建(websocket实时显示过程) 项目应用控制(启动停止) 应用日志的实时查看(websocket) 对象级权限控制(密码管理功能,只能查看编辑自己的密码) 应用日志下载 工单 系统 作业平台(ansible api) WEBSSH(堡垒机) SQL作业平台 ...... 本项目采用以下技
    一个 论坛 github下载地址:https://github.com/likunhong01/ForumSystem 能点个星星最好了 卡的话csdn下载:要积分不能怪我自动设置积分的 一个 论坛 系统 ,一个 Django 论坛 项目 使用:pycharm打开项目后,选择好运行环境,然后在命令行创建数据库(下面两条语句),然后运行就行了 python manage.py makem... 先开启服务,之后执行命令登陆服务器:mysql -u root -p CREATE DATABASE django _bbs; CREATE USER work IDENTIFIED BY ‘ django mooc’; django mooc是密码 GRANT ALL ON django _bbs.* TO ‘work’@’%’ WITH..
    一、功能简介 python 实现随机产生用户名、用户ID、用户年龄、用户职业、用户兴趣,随机在用户之间形成followee(关注者)和follower(追随者)(随机性也有一定的几率设置) 根据概率情况为每位用户设置级别(94%机率为普通用户、3%机率为小众明星、2%机率为普通明星、1%机率为超级明星),该级别可以更好的模拟社交平台中的followee(关注者)和follower(追随者)关系 普通用户(normal):只有与该普通用户A年龄相仿(年龄之差在5岁之内)且职业、兴趣爱好均相同的用户B才会成
    在 Python 中创建一个带有后台的 论坛 可能会比较复杂,但可以从以下几个步骤入手: 确定您的 论坛 的功能需求,包括用户注册、登录、发布帖子、回复帖子、编辑帖子、删除帖子等。 创建一个 Python 项目,并使用一些 Web 框架(如 Flask、 Django 等)来构建 论坛 的后台。您可以在这些框架中使用路由、控制器、模板等来实现 论坛 的功能。 使用数据库(如 MySQL、MongoDB 等)来...
    1. 安装 Django :可以使用pip命令来安装 Django 。 2. 创建一个 Django 项目:使用 django -admin命令创建一个 Django 项目,并为 博客 系统 指定一个名称。 3. 创建 博客 模型:使用 Django 中的模型来定义 博客 的数据模型,如标题、内容、发布日期等。 4. 创建模板:使用 Django 的模板语言来设计 博客 的页面布局。 5. 创建视图:使用 Django 的视图来处理请求,并返回 博客 页面。 6. 创建URL配置:使用 Django 的URL配置来配置路由,以便从浏览器中访问 博客 。 7. 启动服务器:使用 Django 的服务器来启动应用,并在浏览器中测试 博客 。 以上是基于 Django 设计 博客 系统 的一般步骤。具体的实现可能因个人需求和技能水平不同而有所差异。
 
推荐文章
刚毅的围巾  ·  PΛNDΛER×联想拯救者 电竞游戏笔记本电脑-魅族商城
1 年前
纯真的杯子  ·  #穿书# 10本穿书治愈救赎甜宠文小说推荐:古言、现言都有_在线阅读_52书库
1 年前
高大的蛋挞  ·  iPhone 拍照 Live 關閉教學,避免開啟原況照片動態效果 - 塔科女子
1 年前
腼腆的跑步鞋  ·  excel vba 调用摄像头 - CSDN文库
1 年前
知识渊博的草稿本  ·  人文传播学院与海南省广播电视总台开展座谈交流-人文学院
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号