B048-cms03-前端首页文章列表展示 页面静态化

这篇具有很好参考价值的文章主要介绍了B048-cms03-前端首页文章列表展示 页面静态化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

抽取公共资源

抽取导航条和侧边栏
1.新建/WEB-INF/views/common文件夹
2.新建header.jsp和leftMenu.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
		<header class="app-header">
    		<a class="app-header__logo" href="index.html">源码时代</a>
			<a class="app-sidebar__toggle" href="#" data-toggle="sidebar" aria-label="Hide Sidebar"></a>
			<!-- 导航条右边菜单 -->
      		<ul class="app-nav">
        		<!-- 用户菜单 -->
       	 		<li class="dropdown">
        			<a class="app-nav__item" href="#" data-toggle="dropdown" aria-label="Open Profile Menu">
        			<i class="fa fa-user fa-lg"></i></a>
          			<ul class="dropdown-menu settings-menu dropdown-menu-right">
            			<li>
            				<a class="dropdown-item" href="page-login.html">
            				<i class="fa fa-sign-out fa-lg"></i> 退出 </a>
            			</li>
          			</ul>
        		</li>
      		</ul>
		</header>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
		<div class="app-sidebar__overlay" data-toggle="sidebar"></div>
    	<aside class="app-sidebar">
      		<div class="app-sidebar__user">	
      			<img class="app-sidebar__user-avatar" width="48px" height="48px" src="/static/system/images/m1.jpg" alt="User Image">
        		<div>
          			<p class="app-sidebar__user-name">John Doe</p>
        		</div>
      		</div>
      		<ul class="app-menu">
	        	<li>
	        		<a class="app-menu__item active" href="/system/article/index">
	        			<i class="app-menu__icon fa fa-dashboard"></i>
	        			<span class="app-menu__label">文章管理</span>
	        		</a>
	        	</li>
      		</ul>
		</aside>
3.引入Index.jsp和Article.jsp
		<!-- 导航条-->
		<%@ include file="/WEB-INF/views/common/header.jsp" %>
        <!-- 侧边菜单 -->
    	<%@ include file="/WEB-INF/views/common/leftMenu.jsp" %>
抽取静态资源
新建topStatic.jsp文件
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- Main CSS-->
<link rel="stylesheet" type="text/css" href="/static/system/css/main.css">
<!-- Font-icon css-->
<link rel="stylesheet" type="text/css" href="/static/system/css/font-awesome.min.css">
<!-- 引入girdmanager的css -->
<link rel="stylesheet" href="/static/system/gridmanager/css/gm.css">
<!-- 引入gridmanager的js -->
<script type="text/javascript" src="/static/system/gridmanager/js/gm.js"></script>
引入Index.jsp和Article.jsp
		<!-- 头部静态资源 -->
    	<%@ include file="/WEB-INF/views/common/topStatic.jsp" %>
新建buttomStatic.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<script src="/static/system/js/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="/static/system/js/jquery.jdirk.js"></script>
<script type="text/javascript" src="/static/system/js/form-load.js"></script>
<script type="text/javascript" src="/static/system/js/jquery-form.js"></script>
<script src="/static/system/js/popper.min.js"></script>
<script src="/static/system/js/bootstrap.min.js"></script>
<script src="/static/system/js/main.js"></script>
<!-- The javascript plugin to display page loading on top-->
<script src="/static/system/js/plugins/pace.min.js"></script>
<!-- Page specific javascripts-->
<script type="text/javascript" src="/static/system/js/plugins/chart.js"></script>
引入Index.jsp和Article.jsp
		<!-- 底部静态资源 -->
    	<%@include file="/WEB-INF/views/common/buttomStatic.jsp" %>
抽取js文件
在WEB-INF外部/WebContent/static/system/js下新建article文件夹和article.js
document.querySelector('#table-demo-ajaxPageCode').GM({
		        gridManagerName: 'demo-ajaxPageCode',	//名字随意
		        ajaxData: '/system/article/findAll',	//改成findAll
		        ajaxType: 'POST',
		        supportAjaxPage: true,		//是否支持分页
		        sizeData: [5,10,15,20],
		        pageSize: 5,
		        currentPageKey: "localPage",
		        pageSizeKey: "pageSize",
		        supportAdjust: false,
		        supportDrag: false,
		        columnData: [
		            {
		            	key: 'title',
		                align: "center",
		                text: '文章标题'
		            },{
		                key: 'type',
		                align: "center",
		                text: '文章类型',
		                template: function(cell, row, index, key){// 模板   
		                    return cell.name;
		                }
		            },{
		            	key: 'url',
		                align: "center",
		                text: 'url'
		            },{
		                key: 'clickCount',
		                align: "center",
		                text: '点击量'
		            },{
		                key: 'createDate',
		                align: "center",
		                text: '日期'
		            },{
		            	key: 'enable',
		                align: "center",
		                text: '是否启用',
		                template: function(cell, row, index, key){// 模板
		                	//console.debug(cell) // enable属性对应的值
		                	//console.debug(row) // 一行数据的信息  是一个对象
		                	//console.debug(index) // 索引
		                	//console.debug(key) // key对应的字段
		                    return cell?"启用":"禁用";
		                }
		            },{
		                key: 'id',
		                align: "center",
		                text: '操作 &nbsp;&nbsp;<a style="color:green" id="addBtn" href="javascript:;">添加</a>',
		                template: function(cell, row, index, key){// 模板
		                	// row是一个json对象,要转成string
		                	 var str = JSON.stringify(row);
		                	//  console.debug(str);
		                	// data:  数据必须是标准格式  {'id':10,'name':'zs'}
		                    return '<a style="color:red" data-id="'+cell+'" href="javascript:;">删除</a>&nbsp;&nbsp;'+
		                    	   "<a style='color:blue' data-row='"+str+"' href='javascript:;'>修改</a>";
		                }
		            }
		        ]
		    });
		    
		    // 高级查询绑定事件
		    $("#queryButton").click(function(){
		    	
		    	// 获取参数    jquery.jdirk.js提供的方法
		    	var dataForm = $("#queryForm").serializeObject();
		    	
		    	// 发送请求  相当于发送的是gridmanager的url
		    	GridManager.setQuery('demo-ajaxPageCode', dataForm);
		    });
		    
		    
		    var delId;
		 	// 删除操作  绑定的是删除按钮
		    $("body").on("click","a[data-id]",function(){
		    	// 获取id
		    	delId = $(this).data("id");
		    	// alert(delId)
		    	// 弹出模态框
		    	$("#delModal").modal("show");
		    });
		 	
		 	// 删除模态框确定按钮  绑定一个事件  发送删除请求
		    $("#delModalButton").click(function(){
		    	
		    	// alert("......");
		    	// 删除请求
		    	$.ajax({
		    		type: "post",
		    		url: "/system/article/delById",
		    		data: {"id":delId}, // "id="+delId
		    		dataType: "json",
		    		success: function(msg){
		    			if(msg.success){// 成功
		    				// 关闭模态框
		    				$("#delModal").modal("hide");
		    				// 刷新数据 ????
		    				GridManager.refreshGrid("demo-ajaxPageCode", true);
		    			}else{
		    				// 关闭模态框
		    				$("#delModal").modal("hide");
		    				// 失败提示
		    				alert(msg.error)
		    			}
		    		}
		    	});		    	    	
		    });
		 	
		    // 添加操作  绑定添加按钮  事件委托
		    $("body").on("click","#addBtn",function(){
 		    	// 清空form中数据
		    	$("#saveForm").clearForm();
				
		    	// 手动清空隐藏域id
		    	$("#saveId").val("");
		    	
		    	// 弹出模态框
		    	$("#saveModal").modal("show");
		    })
		    
		    // 修改操作  绑定修改按钮  事件委托
		    $("body").on("click","a[data-row]",function(){
		    	// 清空form中数据
		    	$("#saveForm").clearForm();	// clearForm()、ajaxSubmit()都是jquery-form.js插件的方法
		    	// 数据回显  获取数据
		    	var row = $(this).data("row");
		    	// console.debug(row);
		    	
		    	// 数据回显	插件提供的方法
		    	$("#saveForm").setForm(row);
		    	
		    	// 弹出模态框
		    	$("#saveModal").modal("show");
		    })
		    
		    // 保存操作
		    $("#saveButton").click(function(){
		    	// 发送请求
		    	// 把form表单中的数据发送到后台,url路径是form中的action
		    	$("#saveForm").ajaxSubmit({
		    		success: function(msg){	    			
			    		if(msg.success){// 成功
			    			// 关闭模态框
			    			$("#saveModal").modal("hide");
			    			// 刷新数据 ????
			    			GridManager.refreshGrid("demo-ajaxPageCode");
			    		}else{
			    			// 关闭模态框
			    			$("#saveModal").modal("hide");
			    			// 失败提示
			    			alert(msg.error)
			    		}		 
		    		}
		    	});
		    });
引入article.jsp
<!-- 引入article.js -->
<script type="text/javascript" src="/static/system/js/article/article.js"></script>

前台首页展示

引入页面:复制resource里的home文件夹到工程WebContent目录下

将静态资源文件放到static文件夹中,修改引入路径

前台页面发送请求
							// 查询所有的article
							$.ajax({
								type: "post",
								url: "/home/article/findAll",
								dataType:"json",
								success: function(msg){
									console.debug(msg);
								}							
							});
后端处理完成

新建HomeController

@Controller
@RequestMapping("/home")
public class HomeController {
	
	@Autowired
	private IArticleService service;
	
	/**
	 * @Description:前台查询所有article
	 */
	@RequestMapping("/article/findAll")
	@ResponseBody
	public Map<String, Object> findAll(){
		
		return service.findAll();
		
	}
}

ArticleServiceImpl

	@Override
	public Map<String, Object> findAll() {
		// 三个list  ???
		// 技术文章
		List<Article> list1 = mapper.findArticleByCode("technology");
		// 行业新闻
		List<Article> list2 = mapper.findArticleByCode("industry");
		// 学科咨询
		List<Article> list3 = mapper.findArticleByCode("subject");
		
		Map<String,Object> map = new HashMap<>();
		map.put("technology", list1);
		map.put("industry", list2);
		map.put("subject", list3);
		
		return map;
	}

ArticleMapper

	<!-- List<Article> findArticleByCode(String Code); -->
	<select id="findArticleByCode" resultType="article">
		select * from t_article t,t_article_type ty where t.typeId=ty.id
		and ty.code = #{Code} and t.`enable`=1 ORDER BY createDate desc
		limit 8
	</select>
前台页面展示
<div class="content flex-box">
    <div class="wrapper">
        <div class="sectitle-bar flex-box">
            <div class="sectitle">技术文章</div>
            <a target="_blank" href=""  class="more">更多</a>
        </div>
        <ul id="technology">
            <!-- <a target="_blank" href=""><li class="flex-box"><div class="ellipsis-line" title="Java脑筋急转弯"></div><div class="date">2018.18.18</div></li></a> -->
            <!-- 动态往里面添加 -->
        </ul>
    </div>
    <div class="wrapper">
        <div class="sectitle-bar flex-box">
            <div class="sectitle">行业新闻</div>
            <a target="_blank" href=""  class="more">更多</a>
        </div>
        <ul id="industry">
            <!-- <a target="_blank" href=""><li class="flex-box"><div class="ellipsis-line" title="Java脑筋急转弯"></div><div class="date">2018.18.18</div></li></a> -->
            <!-- 动态往里面添加 -->
        </ul>
    </div>
    <div class="wrapper">
        <div class="sectitle-bar flex-box">
            <div class="sectitle">学科资讯</div>
            <a target="_blank" href=""  class="more">更多</a>
        </div>
        <ul id="subject">
            <!-- <a target="_blank" href=""><li class="flex-box"><div class="ellipsis-line" title="Java脑筋急转弯"></div><div class="date">2018.18.18</div></li></a> -->
            <!-- 动态往里面添加 -->
        </ul>
    </div>
</div>
// 查询所有的article
$.ajax({
    type: "post",
    url: "/home/article/findAll",
    dataType:"json",
    success: function(msg){
        // console.debug(msg);
        $.each(msg.technology,function(){// 技术文章  url title createDate
            var a = '<a target="_blank" href="/static/template/'+this.url+'"><li class="flex-box"><div class="ellipsis-line" title="'+this.title+'"></div><div class="date">'+this.createDate+'</div></li></a>'
            $("#technology").append(a);	
        });

        $.each(msg.industry,function(){// 行业新闻
            var a = '<a target="_blank" href="/static/template/'+this.url+'"><li class="flex-box"><div class="ellipsis-line" title="'+this.title+'"></div><div class="date">'+this.createDate+'</div></li></a>'
            $("#industry").append(a);	
        });

        $.each(msg.subject,function(){// 学科咨询
            var a = '<a target="_blank" href="/static/template/'+this.url+'"><li class="flex-box"><div class="ellipsis-line" title="'+this.title+'"></div><div class="date">'+this.createDate+'</div></li></a>'
            $("#subject").append(a);	
        });
    }							
});

cms:两套前端系统对应同一套后端系统,后台改变数据库内容,前台获取展示被后台改变后的数据库内容

web.xml中配置前端欢迎界面可省略部分后缀直接访问前台首页

	<welcome-file-list>
		<welcome-file>home/index.html</welcome-file>
	</welcome-file-list>

页面静态化

FreeMark入门案例

/src/test/java/下新建FreeMarkerTest

public class FreeMarkerTest {
	
	@Test
	public void testName() throws Exception {
//		1.导入freemarker.jar
//		2.获取模板(Template)对象
//			获取Configuration对象 -- 为了获取模板对象
		Configuration config = new Configuration(Configuration.VERSION_2_3_28);
//			设置默认加载路径
		File file = new File("D:/WorkspaceOfEclipse/cms03/src/main/WebContent/static/template");
		config.setDirectoryForTemplateLoading(file);
//			设置默认编码
		config.setDefaultEncoding("utf-8");
//			获取模板
		Template template = config.getTemplate("test.ftl");
//		3.准备数据
//			map
		HashMap<String, Object> map = new HashMap<>();
		map.put("name", "tom");
		map.put("age", 20);
//			java实体对象
//		4.template.process()生成静态资源
		String url = System.currentTimeMillis()+".html";
		FileWriter out = new FileWriter(new File(file, url));
		template.process(map, out);
	}

}

/WebContent/static/下新建template文件夹放入test.ftl模板

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>${name}</h1>
</body>
</html>

运行看结果

抽取工具类

FreeMarkerUtil

public class FreeMarkerUtil {

	/**
	 * @Description:(作用) 静态资源模板
	 * @param:@param templatePath : 模板路径
	 * @param:@param name   :  模板名称
	 * @param:@param data   : 数据
	 * @param:@param suffix : 后缀
	 * @param:@return :    url
	 */
	public static String createFile(String templatePath,String name,Object data,String suffix){
		FileWriter out = null;		
		try {
//			1.导入freemarker.jar
//			2.获取模板(Template)对象
//				获取Configuration对象 -- 为了获取模板对象
			Configuration config = new Configuration(Configuration.VERSION_2_3_28);
//				设置默认加载路径
			File file = new File(templatePath);
			config.setDirectoryForTemplateLoading(file);
//				设置默认编码
			config.setDefaultEncoding("utf-8");
//				获取模板
			Template template = config.getTemplate(name);
//			3.准备数据
//			4.template.process()生成静态资源
			String url = System.currentTimeMillis()+suffix;
			out = new FileWriter(new File(file, url));
			template.process(data, out);
			// 返回一个url
			return url;
		} catch (Exception e) {
			// TODO: handle exception
		}finally {
			if(out!=null){
				try {
					out.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		return null;
	}
}

测试

	@Test
	public void test1() throws Exception {
		String path = "D:/WorkspaceOfEclipse/cms03/src/main/WebContent/static/template";
		ArticleType type = new ArticleType(3L, "人文关怀", "person");
		
		FreeMarkerUtil.createFile(path, "test.ftl", type, ".html");
	}
模板中加入if判断和list遍历

FreeMarkerTest

	@Test
	public void test1() throws Exception {
		String path = "D:/WorkspaceOfEclipse/cms03/src/main/WebContent/static/template";
		
		//ArticleType type = new ArticleType(3L, "人文关怀", "person");
		
		HashMap<String, Object> map = new HashMap<>();
		map.put("name", "tom");
		map.put("age", 16);
		
		List<String> list = new ArrayList<String>();
		list.add("霸王洗发水");
		list.add("返现1000元");
		map.put("lists", list);
		FreeMarkerUtil.createFile(path, "test.ftl", map, ".html");
	}

test.ftl

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<#if age lt 18>
		未成年
		<#else>
		成年了	
	</#if>
        
    <#list lists as list>
		${list}
	</#list>	
</body>
</html>
添加生成静态页面

后台点击添加生成静态页面,前台点击后直接进入已生成的页面

1.将article.html改成article.ftl模板

<div class="info">
    <span><span b>分类: </span>视频教程</span><span><span b>浏览: </span>${clickCount}</span>
</div>
<div class="title">${title}</div>
<div class="content">
    ${content}
</div>

2.后台添加文章方法加入生成页面逻辑
ArticleServiceImpl

	@Override
	public void add(Article article,HttpServletRequest req) {
		// 获取路径
		String templatePath = req.getServletContext().getRealPath("/static/template");
		// 判断file是否存在,如果不存在,就创建一个
		File file = new File(templatePath);
		if(!file.exists()){
			// 创建一个
			file.mkdirs();
		}		
		// 生成页面html
		String url = FreeMarkerUtil.createFile(templatePath, "article.ftl", article, ".html");
		// 把urlset到article中
		article.setUrl(url);
		mapper.add(article);
	}

3.访问测试
http://localhost/static/template/1687172260785.html

删除文章前先删除静态页面

ArticleServiceImpl

	@Override
	public void delById(Long id,HttpServletRequest req) {
		// 删除数据库信息和html文件
		// 先删除html, 再删除数据库
		// 获取路径
		String templatePath = req.getServletContext().getRealPath("/static/template");
		// 获取url
		Article dbarticle = mapper.findOne(id);
		String url = dbarticle.getUrl();
		
		// 删除数据库信息
		mapper.delById(id);
		// 删除html文件
		File file = new File(templatePath, url);
		if(file.exists()){
			// 存在就删除
			file.delete();
		}
	}

ArticleMapper.xml

	<!-- Article findOne(Long id); -->
	<select id="findOne" resultType="article">
		select * from t_article where id = #{id}
	</select>
更新用新数据生成新html并删除旧html

ArticleServiceImpl文章来源地址https://www.toymoban.com/news/detail-500708.html

	@Override
	public void update(Article article,HttpServletRequest req) {
		// 生成一个新的html文件
		// 获取路径
		String templatePath = req.getServletContext().getRealPath("/static/template");
		// 判断file是否存在,如果不存在,就创建一个
		File file = new File(templatePath);
		if(!file.exists()){
			// 创建一个
			file.mkdirs();
		}		
		// 生成页面html
		String url = FreeMarkerUtil.createFile(templatePath, "article.ftl", article, ".html");
		// 把urlset到article中
		article.setUrl(url);
				
		// 删除之前的html文件   获取修改之前的url
		Article dbArticle = mapper.findOne(article.getId());
		
		// 更新数据库
		mapper.update(article);	
		
		String dburl = dbArticle.getUrl();
		// 删除  html
		File file2 = new File(templatePath, dburl);
		if(file2.exists()){
			file2.delete();
		}	
	}

页面跳转详情信息

// 查询所有的article
$.ajax({
    type: "post",
    url: "/home/article/findAll",
    dataType:"json",
    success: function(msg){
        // console.debug(msg);
        $.each(msg.technology,function(){// 技术文章  url title createDate
            var a = '<a target="_blank" href="/static/template/'+this.url+'"><li class="flex-box"><div class="ellipsis-line" title="'+this.title+'"></div><div class="date">'+this.createDate+'</div></li></a>'
            $("#technology").append(a);	
        });

        $.each(msg.industry,function(){// 行业新闻
            var a = '<a target="_blank" href="/static/template/'+this.url+'"><li class="flex-box"><div class="ellipsis-line" title="'+this.title+'"></div><div class="date">'+this.createDate+'</div></li></a>'
            $("#industry").append(a);	
        });

        $.each(msg.subject,function(){// 学科咨询
            var a = '<a target="_blank" href="/static/template/'+this.url+'"><li class="flex-box"><div class="ellipsis-line" title="'+this.title+'"></div><div class="date">'+this.createDate+'</div></li></a>'
            $("#subject").append(a);	
        });
    }							
});	

到了这里,关于B048-cms03-前端首页文章列表展示 页面静态化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 首页文章列表分页模板渲染(Go搭建qiucode.cn 之六)

    距离上一篇已过去好久了,当然咯,秋码记录 也已换了本来的面貌,其中林林种种,不可道于外人乎!然而之所以会有第六篇,完全得益于那位订阅的粉丝,也是他唤起了我应该将 Go搭建qiucode.cn 写完,在此我由衷的感谢这位,且作为本专栏首位订阅者。 接上一篇,我们虽然

    2024年02月14日
    浏览(56)
  • 首页以卡片形式来展示区块链列表数据(Web3项目一实战之五)

    我们已然在 Web3 分布式存储 IPFS(Web3项目一实战之四) 介绍了什么是 IPFS ,以及在本地电脑如何安装它。虽然在上一篇讲解了该怎么安装 IPFS ,也做了相应的配置,但在本地开发阶段,前端总是无法避免 跨域 这个远程请求 api 的”家常便饭的通病“。 很显然,对于出现 跨域

    2024年02月05日
    浏览(44)
  • html + css 实现淘宝首页(静态页面)

    html + css 实现淘宝首页(静态页面) 待续。。。 效果图: html代码如下: css代码如下:

    2024年02月11日
    浏览(44)
  • 详解织梦首页、列表页调用文章body内容的两种方法

    关于首页、列表页调用文章body内容的两种方法,具体方法如下: 第一种方法: 解析: 1、addrields=”字段1,字段2…” 2、idlist=”文章ID”(可不写) 3、channelid=”模型ID”,普通文章默认为1(查看方法:核心–频道模型–内容模型管理–id号) 4、function=’cn_substr(html2text(@me)

    2024年02月02日
    浏览(52)
  • 帝国cms文章内容tags关键词设置调用方法以及tags静态化实现方法

    说实话帝国cms用起来真的不好找一些功能,就比如说帝国cms的tag标签调用。需要注意的是帝国CMS文章的和tags标签并非一码事,标签是设置文章的的,是用来给搜索引擎说明本篇文章的大意,而tags标签是用来链接文章的,对于SEOer来说,使用tags可以起到聚

    2024年02月03日
    浏览(57)
  • 帝国CMS列表页面分别调用年月日(显示个性时间日期)

    在帝国CMS中列表页个性时间显示的实现方式,首先我们要知道用什么方法来实现,这里我们使用PHP代码来做。 要在模板代码中使用PHP代码,就必须勾选此模板代码页面的-使用程序代码.位置就在添加模板页面的列表内容模板(list.var) (*)上边。 然后我们在list.var里边用PHP代码来实

    2024年02月03日
    浏览(45)
  • Spring boot+Vue博客平台:文章列表展示、文章分类与标签管理模块实现

    本文将详细介绍如何实现博客平台中的文章列表展示、文章分类与标签管理功能,包括前端的Vue组件设计和后端的Spring Boot接口实现。在阅读本文后,您将了解如何设计和实现高效、易用的文章列表展示、文章分类与标签管理功能。 1.设计思路 在设计文章列表展示功能时,我

    2023年04月11日
    浏览(54)
  • 【Vue+Element-plus】记录后台首页多echart图静态页面

     Index.vue  DataComparison.vue DateTime.vue HealPatient.vue PeopleNumber.vur TrackPatients.vue VisitsNumber.vue

    2024年02月13日
    浏览(40)
  • 使用Selenium和bs4进行Web数据爬取和自动化(爬取掘金首页文章列表)

    2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板)_软件测试刷题小程序-CSDN博客 文章浏览阅读2.9k次,点赞85次,收藏12次。你知不知道有这么一个软件测试面试的刷题小程序。里面包含了面试常问的软件测试基础题,web自动化测试、

    2024年03月18日
    浏览(60)
  • Python爬虫技术系列-03/4flask结合requests测试静态页面和动态页面抓取

    flask内容参考:Flask框架入门教程(非常详细) 安装flask 创建一个webapp.py文件,内容如下 运行代码 终端输出如下: 在浏览器输入 返回如下 创建webapp_html_str.py文件,代码如下: 运行 运行代码 在浏览器输入 返回如下 返回一个静态html页面 在工程目录下,创建一个templates目录,在

    2024年02月04日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包