日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

layui设置按钮不可点击_(eblog)7、博客发布收藏、用户中心的设置

發(fā)布時間:2025/3/12 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 layui设置按钮不可点击_(eblog)7、博客发布收藏、用户中心的设置 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

小Hub領(lǐng)讀:

繼續(xù)我們的eblog,今天來完成博客文章收藏,用戶中心的設(shè)置!


項目名稱:eblog

項目 Git 倉庫:https://github.com/MarkerHub/eblog(給個 star 支持哈)

項目演示地址:https://markerhub.com:8082

前幾篇項目講解文章:

1、(eblog)Github 上最值得學(xué)習(xí)的 Springboot 開源博客項目!

2、(eblog)小 Hub 手把手教你如何從 0 搭建一個開源項目架構(gòu)

3、(eblog)整合Redis,以及項目優(yōu)雅的異常處理與返回結(jié)果封裝

4、(eblog)用Redis的zset有序集合實現(xiàn)一個本周熱議功能

5、(eblog)自定義Freemaker標(biāo)簽實現(xiàn)博客首頁數(shù)據(jù)填充


1、用戶中心-1

上一篇文章中,我們已完成了用戶的登錄與注冊,現(xiàn)在我們來完成以下登錄之后可以操作的事情,比如進(jìn)入用戶中心等

我的主頁

首先我們來看看我的主頁:

這是點擊用戶主頁之后的顯示效果,上面是用戶的基本信息,左邊是最近發(fā)表的文章,右邊是最近的操作等(評論,發(fā)表等),最近操作部分我們暫時就不弄了,課下大家自行完成。

所以這個頁面要完成很簡單,只需要把用戶的基本信息,和最近的文章傳到頁面就行了:

  • com.example.controller.UserController

@Controller

public class UserController extends BaseController{

@RequestMapping("/user/{id:\\d*}")

public String home(@PathVariable Long id) {

User user = userService.getById(id);

user.setPassword(null);

//30天內(nèi)容的文章

Date date30Before = DateUtil.offsetDay(new Date(), -30).toJdkDate();

List<Post> posts = postService.list(new QueryWrapper<Post>()

.eq("user_id", id)

.ge("created", date30Before)

.orderByDesc("created"));

req.setAttribute("user", user);

req.setAttribute("posts", posts);

return "user/home";

}

}

至于頁面,就是直接展示數(shù)據(jù),就不再多說了!~

用戶中心

點擊用戶中心后,是個tab標(biāo)簽,分為我發(fā)的貼和我收藏的貼

我發(fā)的貼

先來看看我發(fā)的貼,這個直接安裝userId查詢post就完成了

  • com.example.controller.CenterController

@GetMapping("")

public String index() {

Page page = getPage();

log.info("-------------->進(jìn)入個人中心");

QueryWrapper<Post> wrapper = new QueryWrapper<Post>().eq("user_id", getProfileId())

.orderByDesc("created");

IPage<Post> pageData = postService.page(page, wrapper);

req.setAttribute("pageData", pageData);

return "center/index";

}

好像沒啥知識點說的~

我收藏的貼

我收藏的貼,因為涉及到關(guān)聯(lián)表

  • UserCollection

  • Post

所以,需要關(guān)聯(lián)查詢

@GetMapping("/collection")

public String collection() {

Page page = getPage();

QueryWrapper queryWrapper = new QueryWrapper<>().eq("u.user_id", getProfileId()).orderByAsc("u.created");

IPage<Post> pageData = collectionService.paging(page, queryWrapper);

req.setAttribute("pageData", pageData);

return "center/collection";

}

collectionService.paging的最終mapper是這樣的:

<select id="selectPosts" resultType="com.example.entity.Post">

select *

from user_collection u

left join post p on u.post_id = p.id

${ew.customSqlSegment}

select>

所以我們的條件是u.userid。用u.來區(qū)分是哪個表的userid。 然后其他的頁碼的渲染,就直接是個宏搞定:

style="text-align: center">

@page>

基本設(shè)置

我的資料

ok,上面的都比較簡單,我們來看看基本設(shè)置,這里涉及到表單提交和頭像修改等。

我的資料和密碼修改都只是簡單的表單提交,上次我們說過,表單提交都已經(jīng)幫我們封裝好的了,我們只需要返回的時候告訴表單提交成功之后的跳轉(zhuǎn)鏈接是啥,所以我的資料提交是這樣的:

  • com.example.controller.CenterController

@GetMapping("/setting")

public String setting() {

User user = userService.getById(getProfileId());

user.setPassword(null);

req.setAttribute("user", user);

return "center/setting";

}

@ResponseBody

@PostMapping("/setting")

public Result postSetting(User user) {

if(StringUtils.isEmpty(user.getUsername())){

return Result.fail("用戶名不能為空");

}

User tempUser = userService.getById(getProfileId());

// tempUser.setEmail(user.getEmail());

tempUser.setUsername(user.getUsername());

tempUser.setGender(user.getGender());

tempUser.setSign(user.getSign());

boolean isSucc = userService.updateById(tempUser);

if(isSucc) {

//更新shiro的信息

AccountProfile profile = getProfile();

profile.setUsername(user.getUsername());

profile.setGender(user.getGender());

}

return isSucc ? Result.succ("更新成功", null, "/center/setting"): Result.fail("更新失敗");

}

資料提交之后涉及到shiro登錄信息的修改,所以在updateById完成之后,我們獲取到shiro的用戶信息 AccountProfile profile = getProfile();,然后直接重新set搞定。 前端需要注意的是,我在確認(rèn)按鈕那里加了alert=*"true"*

class="layui-btn" key="set-mine" lay-filter="*" lay-submit alert="true">確認(rèn)修改

頭像

頭像設(shè)計到圖片上傳,

  • com.example.controller.CenterController

@ResponseBody

@PostMapping("/upload")

public Result upload(@RequestParam(value = "file") MultipartFile file,

@RequestParam(name="type", defaultValue = "avatar") String type) {

if(file.isEmpty()) {

return Result.fail("上傳失敗");

}

// 獲取文件名

String fileName = file.getOriginalFilename();

log.info("上傳的文件名為:" + fileName);

// 獲取文件的后綴名

String suffixName = fileName.substring(fileName.lastIndexOf("."));

log.info("上傳的后綴名為:" + suffixName);

// 文件上傳后的路徑

String filePath = constant.getUploadDir();

if ("avatar".equalsIgnoreCase(type)) {

fileName = "/avatar/avatar_" + getProfileId() + suffixName;

} else if ("post".equalsIgnoreCase(type)) {

fileName = "/post/post_" + DateUtil.format(new Date(), DatePattern.PURE_DATETIME_MS_PATTERN) + suffixName;

}

File dest = new File(filePath + fileName);

// 檢測是否存在目錄

if (!dest.getParentFile().exists()) {

dest.getParentFile().mkdirs();

}

try {

file.transferTo(dest);

log.info("上傳成功后的文件路徑未:" + filePath + fileName);

String path = filePath + fileName;

String url = constant.getUploadUrl() + fileName;

log.info("url ---> {}", url);

User current = userService.getById(getProfileId());

current.setAvatar(url);

userService.updateById(current);

//更新shiro的信息

AccountProfile profile = getProfile();

profile.setAvatar(url);

return Result.succ(url);

} catch (IllegalStateException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return Result.succ(null);

}

上面的邏輯其實還是很簡單的,首先獲取到圖片,重命名,并保存到指定位置,然后更新user,在更新shiro的頭像信息。 文件復(fù)制就這一行代碼重要

file.transferTo(dest);

其他都比較固定了。 另外,因為我們的圖片位置是存放在根目錄下的:

這涉及到一些靜態(tài)資源的加載問題,所以我們需要在mvc配置中添加這個靜態(tài)資源的位置,

@Configuration

public class WebMvcConfig implements WebMvcConfigurer {

@Autowired

Constant constant;

@Override

public void addResourceHandlers(ResourceHandlerRegistry registry) {

registry.addResourceHandler("/upload/avatar/**")

.addResourceLocations("file:///" + constant.getUploadDir() + "/avatar/");

}

}

上面的WebMvcConfig重寫了addResourceHandlers方法,把upload的文件夾讀取進(jìn)去了,然后Constant 是個加載的常量,我提取到了配置文件中

  • com.example.common.lang.Constant

@Data

@Component

public class Constant {

@Value("${file.upload.dir}")

private String uploadDir;

@Value("${file.upload.url}")

private String uploadUrl;

}

然后配置文件是這樣的:

  • application.yml

file:

upload:

dir: ${user.dir}/upload

url: http://localhost:8080/upload

user.dir表示用戶根路徑,當(dāng)然了,現(xiàn)在圖片我是直接存在了本地硬盤上,同學(xué)們可以自行拓展上傳到七牛云等云盤上。 所以上面的圖片上的avatar5.png,我們的訪問路徑是:http://localhost:8080/upload/avatar/avatar5.png

密碼

密碼修改也只是一個簡單的form表單提交

@ResponseBody

@PostMapping("/repass")

public Result repass(String nowpass, String pass, String repass) {

if(!pass.equals(repass)) {

return Result.fail("兩次密碼不相同");

}

User user = userService.getById(getProfileId());

String nowPassMd5 = SecureUtil.md5(nowpass);

if(!nowPassMd5.equals(user.getPassword())) {

return Result.fail("密碼不正確");

}

user.setPassword(SecureUtil.md5(pass));

userService.updateById(user);

return Result.succ("更新成功", null, "/center/setting");

}

貌似沒啥說的?

我的消息

展示消息

我的消息包括兩種,一個是系統(tǒng)消息,一個是別人評論了我的文章,或者收藏了我的文章等類型。

這里我就搞了兩種,com.example.entity.UserMessage的type設(shè)置了2中類型:

  • type消息類型,1評論消息,2系統(tǒng)消息

頁面展示的時候我們需要根據(jù)type的類型來選擇要展示的數(shù)據(jù)樣式,我們先來看下實體的結(jié)構(gòu)

CREATE TABLE `user_message` (

? `id` bigint(20) NOT NULL AUTO_INCREMENT,

? `from_user_id` bigint(20) DEFAULT NULL COMMENT '發(fā)送消息的用戶ID',

? `to_user_id` bigint(20) NOT NULL COMMENT '接收消息的用戶ID',

? `post_id` bigint(20) DEFAULT NULL COMMENT '消息可能關(guān)聯(lián)的帖子',

? `comment_id` bigint(20) DEFAULT NULL COMMENT '消息可能關(guān)聯(lián)的評論',

? `content` text,

? `type` tinyint(2) DEFAULT NULL COMMENT '消息類型,1評論消息,2系統(tǒng)消息',

? `created` datetime NOT NULL,

? `modified` datetime DEFAULT NULL,

? PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

這個表里面有很多廣關(guān)聯(lián)的id,那么在頁面展示的時候我們需要展示評論詳情,用戶來源,評論文章標(biāo)題等的時候就需要關(guān)聯(lián)很多表,所以在寫sql的時候我們采用了另一種方式來完成,我們先來看看vo:

@Data

public class MessageVo extends UserMessage {

private String toUserName;

private String fromUserName;

private String postTitle;

private String commentContent;

}

上面就是我們的數(shù)據(jù)需要展示的內(nèi)容,如何才能讓sql都查出來呢,我們來看看sql:

id="selectMessages" resultType="com.example.vo.MessageVo">

SELECT m.*,

( SELECT username FROM `user` WHERE id = m.to_user_id ) AS toUserName,

( SELECT username FROM `user` WHERE id = m.from_user_id ) AS fromUserName,

( SELECT title FROM `post` WHERE id = m.post_id ) AS postTitle,

( SELECT content FROM `comment` WHERE id = m.comment_id ) AS commentContent

FROM `user_message` m

${ew.customSqlSegment}

可以看到上面的內(nèi)容,我在select的內(nèi)容中又select了一遍,比如根據(jù)touserid 查出toUserName等。所以我們寫起來就簡單了。 編碼的時候我們就直接通過這個sql查詢出結(jié)果:

@GetMapping("/message")

public String message() {

Page<UserMessage> page = getPage();

QueryWrapper wrapper = new QueryWrapper<UserMessage>()

.eq("to_user_id", getProfileId())

.orderByDesc("created");

IPage<MessageVo> pageData = userMessageService.paging(page, wrapper);

req.setAttribute("pageData", pageData);

return "center/message";

}

頁面端根據(jù)type來展示數(shù)據(jù)

href="/user/${mess.fromUserId}" target="_blank">${mess.fromUserName}評論了您的文章 target="_blank" href="${base}/post/${mess.postId}">${mess.postTitle}

#if>

系統(tǒng)消息:${mess.content}

#if>

刪除消息

刪除的js原框架已經(jīng)幫我們完成了,所以我們只需要填充數(shù)據(jù),特別是data-id

data-id="${mess.id}">

刪除邏輯如下:

@ResponseBody

@PostMapping("/message/remove")

public Result removeMsg(Long id, boolean all) {

QueryWrapper<UserMessage> warapper = new QueryWrapper<UserMessage>()

.eq("to_user_id", getProfileId())

.eq(!all,"id", id);

//只能刪除自己的消息

boolean res = userMessageService.remove(warapper);

return res ? Result.succ("操作成功", null, "/center/message") : Result.fail("刪除失敗");

}

  • static/res/mods/user.js

上面的js有些鏈接需要修改下,大家注意一下

2、用戶中心-2

上面的用戶中心,我們完成了一些數(shù)據(jù)的展示,現(xiàn)在我們來床造一些數(shù)據(jù),比如發(fā)表文章,評論等。這就涉及到一些登錄后的權(quán)限問題,未登錄操作報錯提示等問題,我們在碼代碼的過程再作細(xì)節(jié)的調(diào)整。

發(fā)布編輯博客

我們先來看看評論的頁面

發(fā)布博客分為新發(fā)布和編輯發(fā)布,一般來說我們根據(jù)是否有傳博客id過來判斷,如果有id,那么我們就查詢出來,然后回顯數(shù)據(jù)提交更新,因為頁面都是一樣的,所以,新發(fā)布、編輯我們用了一個方法,從這個頁面可以看到,我們需要的數(shù)據(jù)有博客實體,還有分類列表,還有個驗證碼。

@GetMapping("/post/edit")

public String edit() {

String id = req.getParameter("id");

Post post = new Post();

if(!StringUtils.isEmpty(id)) {

post = postService.getById(Long.valueOf(id));

Assert.notNull(post, "文章已被刪除!");

Long profileId = getProfileId();

Assert.isTrue(post.getUserId()==getProfileId(), "無權(quán)限編輯此文章!");

}

List<Category> categories = categoryService.list(new QueryWrapper<Category>()

.orderByDesc("order_num"));

req.setAttribute("post", post);

req.setAttribute("categories", categories);

return "post/edit";

}

這個就是我們跳轉(zhuǎn)到編輯頁面的controller,從里面可以看到,我們通過id是否為空來判斷是否是編輯,如果是編輯,我們還用斷言來判斷一下文章是否已經(jīng)刪除,或者是否是自己發(fā)布的文章等。

延伸:斷言與異常

這里有個細(xì)節(jié),當(dāng)我們是新發(fā)布文章時候,那么我們傳過去的post就是個new Post(),屬性都是空的,所以我們在頁面中使用${post.title}時候freemaker會報錯,這時候我們需要解決這個問題,讓他不報錯,解決方法很簡單,我們只需要在配置文件中配置好freemaker在這種情況下不報錯就行了:

spring:

freemarker:

cache: false

settings:

classic_compatible: true

加上了classic_compatible=true之后,那么我們在剛才屬性為空的情況下我們就不會報錯了。?

好了,那么文章填充好內(nèi)容之后我們提交,<form?*action="/post/submit" *method=**"post">,我們寫一個submit方法,這里面我們需要考慮幾個問題:

  • Post必填字段是否文章和符合要求

  • 如果是編輯,那么是否是自己的文章

  • 認(rèn)證碼問題

好,接下來我們一一解決,首先來看下驗證碼問題,頁面中的“人類認(rèn)證”,應(yīng)該是是類似于注冊頁面的驗證碼問題來的,不過這里我就直接跳過了,直接寫死了1+1=2的答案,大家回去自行加上驗證碼的驗證,邏輯其實簡單,生成驗證碼放到session中,然后submit時候比較session中的認(rèn)證碼和提交的驗證碼對比即可,和注冊驗證碼一樣的邏輯。

驗證碼我寫死了:

if(!"2".equals(vercode)) {

return Result.fail("人類認(rèn)證錯誤!");

}

接下來看看post字段問題,我們以前講過一個框架hibernate validatior,剛好springboot自帶集成了這個框架,那么我們直接使用,使用方法是找到post實體,然后在字段上添加屬性的認(rèn)證邏輯,比如:

/**

* 標(biāo)題

*/

@Length(min = 4,max = 32, message = "標(biāo)題長度不能超過最少4位,最長32位")

@NotBlank(message = "標(biāo)題不能為空")

private String title;

/**

* 內(nèi)容

*/

@NotBlank(message = "內(nèi)容不能為空")

private String content;

@NotNull(message = "分類不能為空")

private Long categoryId;

然后submit方法中參數(shù)驗證post,需要注入到@Valid注解和BindingResult驗證結(jié)果。所以整體代碼是這樣的:

@ResponseBody

@Transactional

@PostMapping("/post/submit")

public Result submit(@Valid Post post, BindingResult bindingResult, String vercode) throws JsonProcessingException {

if(!"2".equals(vercode)) {

return Result.fail("人類認(rèn)證錯誤!");

}

if(bindingResult.hasErrors()) {

return Result.fail(bindingResult.getFieldError().getDefaultMessage());

}

if(post.getId() == null) {

post.setUserId(getProfileId());

post.setModified(new Date());

post.setCreated(new Date());

post.setCommentCount(0);

post.setEditMode(null);

post.setLevel(0);

post.setRecommend(false);

post.setViewCount(0);

post.setVoteDown(0);

post.setVoteUp(0);

} else {

Post tempPost = postService.getById(post.getId());

Assert.isTrue(tempPost.getUserId()==getProfileId(), "無權(quán)限編輯此文章!");

}

postService.saveOrUpdate(post);

return Result.succ("發(fā)布成功", null, "/post/" + post.getId());

}

可以看到submit(@Valid Post post, BindingResult bindingResult, String vercode)參數(shù)的使用,bindingResult.hasErrors()就是判斷提交的post是否符合驗證邏輯的。 后面說到的是否是自己的文章,只需要比較一下post.userId和當(dāng)前登錄的用戶id即可,直接使用斷言判斷。

那么這里我來延伸一個問題,斷言的用處。我們知道很多地方我們需要做一下校驗和判斷,從而知道數(shù)據(jù)是否符合預(yù)期的期望,如果不符合那么斷言就會拋出異常。

那么我們需要對斷言拋出的錯誤進(jìn)行一番處理,有兩種情況,同步方法或異步方法,當(dāng)同步的controller時候,我們跳轉(zhuǎn)到異常頁面,并把斷言的錯誤提示展示出來。那么異步的話,我們需要返回json數(shù)據(jù),彈窗提示斷言的錯誤提示。

在之前,我們已經(jīng)做過一個全局異常處理,我發(fā)現(xiàn)寫得不是很好,對我們斷言的錯誤處理不夠好,所以這里我調(diào)整了一下,我們通過req的header中是否包含X-Requested-With來判斷是否是異步的方法。然后通過獲取resp.getWriter()來寫入json數(shù)據(jù)。

  • com.example.common.exception.GlobalExceptionHandler

@Slf4j

@ControllerAdvice

public class GlobalExceptionHandler {

@ExceptionHandler(value = Exception.class)

public ModelAndView defaultErrorHandler(HttpServletRequest req, HttpServletResponse resp, Exception e) {

log.error("------------------>捕捉到全局異常", e);

if (req.getHeader("accept").contains("application/json") || (req.getHeader("X-Requested-With")!= null

&& req.getHeader("X-Requested-With").contains("XMLHttpRequest") )) {

try {

System.out.println(e.getMessage());

Result result = Result.fail(e.getMessage(), "some error data");

resp.setCharacterEncoding("utf-8");

PrintWriter writer = resp.getWriter();

writer.write(JSONUtil.toJsonStr(result));

writer.flush();

} catch (IOException i) {

i.printStackTrace();

}

return null;

}

if(e instanceof HwException) {

//...

}

ModelAndView mav = new ModelAndView();

mav.addObject("exception", e);

mav.addObject("message", e.getMessage());

mav.addObject("url", req.getRequestURL());

mav.setViewName("error");

return mav;

}

}

刪除博客

上面我們已經(jīng)可以發(fā)布和編輯文章,我們可以在用戶中心的我發(fā)布的帖子中可以看到自己發(fā)布的文章,接下來我們來弄一下刪除博客,同樣道理,需要做一下簡單校驗

  • 帖子是否存在

  • 是否是自己的帖子

  • 刪除與帖子相關(guān)的消息或收藏等

都比較簡單,所以我就直接給出代碼了,收藏功能我們雖然還沒做,但是刪除邏輯簡單,所以我們直接寫上去了。

@ResponseBody

@Transactional

@PostMapping("/post/delete")

public Result delete(Long id) {

Post post = postService.getById(id);

Assert.notNull(post, "該帖子已被刪除");

Assert.isTrue(post.getUserId()==getProfileId(), "無權(quán)限刪除此文章!");

postService.removeById(id);

// 刪除相關(guān)消息、收藏等

userMessageService.removeByMap(MapUtil.of("post_id", id));

userCollectionService.removeByMap(MapUtil.of("post_id", id));

return Result.succ("刪除成功", null, "/center");

}

大家主題調(diào)整一下js的url,原本的url不是/post/delete的,注意改過來~

發(fā)表刪除評論

渲染

接下來我們看下評論的功能,上一次我們已經(jīng)能把文章的評論功能展示出來了,但是有個bug,就是一些表情和圖片不能渲染出來,我們只是把內(nèi)容原原本本展示出來而已,基于layui的這個編輯器,我們還要做下渲染,我們先來完成這部分然后再作評論功能,其實簡單,模板中已經(jīng)給出了提示,如果我們用的是layui自帶的編輯器的話,我們需要加上那段代碼:

然后又因為layui加載模塊的js,我們寫在了layout.ftl模板上了,所以這里我們等頁面加載完成之后我們再渲染,這樣之前的js已經(jīng)渲染完成了。我們就用到了jq的$(function () {});。然后重要的就是othis.html(fly.content(html));渲染代碼了。

我們看到的效果是這樣的:?

好了,上面的div的類是detail-body都已經(jīng)得以渲染,包括文章內(nèi)容等部分。

發(fā)布

評論發(fā)布其實涉及到的東西還是挺多的,我們先來梳理一下

  • 一下簡單邏輯判斷

  • 文章的評論數(shù)量加一

  • 側(cè)邊欄的本周熱議重新排行

  • 通知文章作者有人評論了

  • 通知@的用戶有人回復(fù)了你的評論

1、一下簡單邏輯判斷,其實就是判斷內(nèi)容是否為空等,沒啥說的,直接斷言判斷

@ResponseBody

@Transactional

@PostMapping("/post/reply")

public Result reply(Long pid, Long parentId, String content) {

Assert.notNull(pid, "找不到對應(yīng)文章!");

Assert.hasLength(content, "評論內(nèi)容不能為空!");

Post post = postService.getById(pid);

Assert.isTrue(post != null, "該文章已被刪除");

...

}

2、保存評論并文章評論數(shù)量加一

Comment comment = new Comment();

comment.setPostId(pid);

comment.setContent(content);

comment.setUserId(getProfileId());

comment.setCreated(new Date());

comment.setModified(new Date());

comment.setLevel(0);

comment.setVoteDown(0);

comment.setVoteUp(0);

commentService.save(comment);

// 評論數(shù)量加一

post.setCommentCount(post.getCommentCount() + 1);

postService.saveOrUpdate(post);

3、側(cè)邊欄的本周熱議功能

關(guān)于這個功能我們一開始就做了,但是好像考慮有點不周全,只有評論加一,沒有評論減一,因為后面刪除評論就需要減一了,所以我們調(diào)整一下postService.incrZsetValueAndUnionForLastWeekRank這個方法,加上一個參數(shù)*boolean *isIncr來判斷是增加還是減少。

大家注意一下所以調(diào)用了這個方法的地方都修改一下。

所以側(cè)邊欄的數(shù)量加一很簡單了,我們直接調(diào)用這個方法就搞定了

//更新首頁排版版的評論數(shù)量

postService.incrZsetValueAndUnionForLastWeekRank(comment.getPostId(), true);

4、通知作者

用戶中心的我的消息就是用來查看消息的,我們還要區(qū)分消息類型來展示不同的樣式。我們先把消息保存起來,但只是保存起來其實是不夠的,我們學(xué)過websocket,但有評論的時候我們應(yīng)該實時通知作者,這怎么做到呢,下一次作業(yè)我們會做好調(diào)整。我們先把消息保存起來。

// 通知作者

UserMessage message = new UserMessage();

message.setPostId(pid);

message.setCommentId(comment.getId());

message.setFromUserId(getProfileId());

message.setToUserId(post.getUserId());

message.setType(1);

message.setContent(comment.getContent());

message.setCreated(new Date());

userMessageService.save(message);

5、通知被@的用戶

當(dāng)我們點擊評論的回復(fù)按鈕時候,評論的輸入框中就會出現(xiàn)@當(dāng)前評論的用戶名稱,所以我們發(fā)布的評論需要告知這個用戶,根據(jù)@的特點,我們提取@與空格之間的用戶名稱,然后搜索出來再報錯消息。

// 通知@的人

if(content.startsWith("@")) {

String username = content.substring(1, content.indexOf(" "));

System.out.println(username);

QueryWrapper<User> wrapper = new QueryWrapper<User>().eq("username", username);

User user = userService.getOne(wrapper);

if(user != null) {

UserMessage message2 = new UserMessage();

message.setPostId(pid);

message2.setCommentId(comment.getId());

message2.setFromUserId(getProfileId());

message2.setToUserId(user.getId());

message2.setType(3);

message2.setContent(comment.getContent());

message2.setCreated(new Date());

userMessageService.save(message2);

}

}

String username = content.substring(1, content.indexOf(" "));就是提取用戶名稱來的,那么這里又涉及到一個問題,就是用戶昵稱的唯一性問題,所以我們需要修改一下注冊的時候,我們也要加上昵稱唯一性的校驗。

  • com.example.service.impl.UserServiceImpl#register

User po = this.getOne(new QueryWrapper<User>().eq("email", user.getEmail()).or().eq("username", user.getUsername()));

if(po != null) {

return Result.fail("郵箱或昵稱已被注冊");

}

注意同步一下代碼~,其實用戶中心的修改用戶昵稱那里也需要加上唯一性校驗,大家自行完成。另外,我還在數(shù)據(jù)庫中加了唯一索引,保證字段的唯一。?

上面的方法,我們后期還需要調(diào)整,現(xiàn)在展示先這樣做。

刪除

評論的刪除也是差不多的邏輯

  • 簡單校驗

  • 評論刪除

  • 評論數(shù)量減一

  • 本周熱議重新排行

直接給出代碼了,有了添加的代碼邏輯,相信對刪除邏輯也應(yīng)該熟悉才行。

@ResponseBody

@Transactional

@PostMapping("/post/jieda-delete/")

public Result reply(Long id) {

Assert.notNull(id, "評論id不能為空!");

Comment comment = commentService.getById(id);

Assert.notNull(comment, "找不到對應(yīng)評論!");

if(comment.getUserId() != getProfileId()) {

return Result.fail("不是你發(fā)表的評論!");

}

commentService.removeById(id);

// 評論數(shù)量減一

Post post = postService.getById(comment.getPostId());

post.setCommentCount(post.getCommentCount() - 1);

postService.saveOrUpdate(post);

//評論數(shù)量減一

postService.incrZsetValueAndUnionForLastWeekRank(comment.getPostId(), false);

return Result.succ(null);

}

未登錄提示 什么是未登錄提示,之前我們做過未登錄跳轉(zhuǎn)到登錄頁面,其實我們依靠的都是shiro框架。一些涉及到用才能操作的就需要登錄之后才能完成,回顧一下我們學(xué)過的shiro內(nèi)容,有兩種方法:

  • 配置式:在com.example.config.ShiroConfig#shiroFilter配置hashMap.put("/post/edit",?"auth");

  • 或者注解形式在對應(yīng)方法上使用@RequiresAuthentication

auth是過濾器的別名,具體其實是AuthFilter。

所以大家記得,一些需要登錄才能操作的方法記得用這兩種形式標(biāo)記,不然可能用getProfileId()就會報錯。畢竟需要登錄之后才能操作的內(nèi)容!

?給eblog一個star,感謝支持哈

總結(jié)

以上是生活随笔為你收集整理的layui设置按钮不可点击_(eblog)7、博客发布收藏、用户中心的设置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

久草在线这里只有精品 | 日韩在线免费不卡 | 日韩亚洲国产中文字幕 | 亚洲综合色丁香婷婷六月图片 | 在线观看日韩免费视频 | 999日韩| 色婷婷狠狠18 | 日韩精品一区二区免费视频 | 免费黄色在线播放 | 国内精品福利视频 | 91精品中文字幕 | 亚洲精品一区二区三区在线观看 | 亚洲精品午夜视频 | 日韩欧美精品在线观看 | 97精品伊人 | 国产精品久久久久久久久久久不卡 | 国产色婷婷精品综合在线手机播放 | 天天爽夜夜操 | 日韩av播放在线 | 成人动态视频 | 亚洲高清激情 | 久久综合婷婷综合 | 69亚洲视频| 欧美专区亚洲专区 | 99视频精品在线 | 日韩性色 | 欧美一区二区精美视频 | 亚洲精品福利视频 | 永久av免费在线观看 | 国产99在线 | 亚洲最大成人免费网站 | 人人澡人摸人人添学生av | 国产麻豆果冻传媒在线观看 | 国产精品精 | 欧美整片sss | 亚洲国产美女久久久久 | 久久免费的精品国产v∧ | 久草视频国产 | 中文字幕成人一区 | 欧美色伊人 | 精品免费国产一区二区三区四区 | 久久久 精品 | 成人av.com| 成人午夜剧场在线观看 | 看毛片网站 | 手机av永久免费 | 国产精品久久9 | 免费视频一区二区 | 一区免费观看 | 国产视频第二页 | 天天操天天射天天爽 | 玖玖在线视频观看 | 91污视频在线 | 中文字幕乱码在线播放 | 在线激情网 | 亚洲一级电影视频 | 国产无遮挡猛进猛出免费软件 | 国产精品igao视频网入口 | 久久精品波多野结衣 | 九九免费精品视频 | 日韩在线观看a | 亚洲综合涩 | 久久久国产精品网站 | 97精品国产91久久久久久久 | 国产精品igao视频网入口 | 欧美激情视频免费看 | 国内精品99 | 国产免费区 | 欧美精品免费视频 | 日韩在线 一区二区 | 中文字幕在线播出 | 久久无码精品一区二区三区 | 国产精品18久久久久久久网站 | 美女免费网视频 | 激情中文字幕 | 国产精品在线看 | 国偷自产中文字幕亚洲手机在线 | 欧美日韩不卡在线视频 | 国产精品一区二区三区四区在线观看 | 97精品超碰一区二区三区 | 欧美黑吊大战白妞欧美 | 91中文字幕在线视频 | 免费观看mv大片高清 | 深爱五月激情五月 | 婷婷开心久久网 | 国产三级精品三级在线观看 | 国产三级视频在线 | 成人超碰在线 | 久久精品99北条麻妃 | 正在播放亚洲精品 | 国产区欧美 | 黄免费在线观看 | 亚洲精品久久久久久中文传媒 | 国产精品1区2区3区在线观看 | av观看在线观看 | 国产精品日韩久久久久 | 国产免费专区 | 亚洲精品在线网站 | 国产亚洲视频在线免费观看 | 久久高清av | 91av视频播放 | 国产精品久久久久免费观看 | 日韩av图片 | 免费a视频 | 蜜臀av在线一区二区三区 | 啪一啪在线 | 中文字幕在线日 | 久久99热这里只有精品国产 | 日日操天天爽 | 99精品久久精品一区二区 | 亚洲成a人片在线www | av色综合网| 欧美精品中文字幕亚洲专区 | 精品在线观看国产 | 日日干网 | 日韩欧美一区二区在线观看 | 中文字幕在线观看第一区 | 中文字幕久久精品一区 | 欧美日韩一二三四区 | 九九九九精品 | 伊人www22综合色 | 国产专区视频在线观看 | 中文字幕一区二区三区在线视频 | 右手影院亚洲欧美 | 看黄色91| 久久免费国产视频 | 欧美日韩aaaa | 日韩精品一区二区三区电影 | 99免费视频 | 97色噜噜 | 国产成人a亚洲精品 | 激情www | 久久99国产精品 | 亚洲精品国产自产拍在线观看 | 91av福利视频 | 91精品国自产在线偷拍蜜桃 | 久久久久久久久久久久久久电影 | 欧美亚洲成人xxx | 亚洲va欧美va人人爽春色影视 | 91亚洲视频在线观看 | 国产在线播放一区二区 | 午夜a区| 日韩中文字幕在线看 | 色婷婷狠 | 欧美电影黄色 | 欧美在线观看视频一区二区三区 | 一区在线免费观看 | 成人av av在线 | 成人高清av在线 | 久久91久久久久麻豆精品 | 91av在线电影 | 久久国产视频网 | 久草免费资源 | 黄色av一区二区 | 免费视频三区 | 日日夜夜网站 | 91网址在线观看 | 国产精品一区二区免费看 | 亚洲精品乱码久久久久久蜜桃欧美 | 日本精品视频在线观看 | 五月天丁香亚洲 | 美女搞黄国产视频网站 | 久久久国际精品 | 九九久久在线看 | 国产专区在线 | 97视频在线播放 | 天天干.com | 91网址在线 | 久久精品国产免费看久久精品 | 久草av在线播放 | 五月婷婷黄色 | 成人三级网址 | 97福利在线 | 欧美日韩伦理一区 | 国产精品电影在线 | 亚洲黄色在线播放 | 国产资源在线免费观看 | 国产97免费 | 日日激情 | 五月天久久精品 | 亚洲欧洲美洲av | 97超碰人人澡 | 日韩成人在线一区二区 | 日韩视频精品在线 | 亚洲精品在线观看网站 | 99久久婷婷国产 | 国产精品久久久久久久久久免费 | 一区二区三区韩国免费中文网站 | 成人黄色免费观看 | 成人毛片a | 蜜臀av性久久久久蜜臀aⅴ流畅 | 97色国产 | 色网av| wwwwww黄| 精品a在线| 99在线国产 | 日韩精品高清不卡 | 国产精品免费久久久久影院仙踪林 | 在线免费观看黄色 | 国产91精品看黄网站在线观看动漫 | 人人爽人人| 黄色影院在线免费观看 | 欧美日韩亚洲第一 | 69久久久久久久 | 亚洲天天| 国产黄色美女 | 亚洲丝袜中文 | 欧美在线你懂的 | 久久网站av | 日韩二区三区 | 成人性生交大片免费看中文网站 | 色综合夜色一区 | 亚洲精品久久久久58 | 中文不卡视频在线 | 欧美性精品| 亚洲成aⅴ人片久久青草影院 | 国产成人三级在线播放 | 天堂av免费在线 | 国产精品自产拍在线观看蜜 | 欧美激情一区不卡 | 久久96国产精品久久99软件 | 久久久久久国产精品美女 | 日韩一级黄色片 | 亚洲精品国偷自产在线91正片 | 香蕉久草| avcom在线 | 亚州欧美视频 | 欧美午夜精品久久久久 | 天天天操天天天干 | 超碰在线官网 | 亚洲一区二区三区精品在线观看 | 操综合| 在线a亚洲视频播放在线观看 | 久久久不卡影院 | 中文av字幕在线观看 | 色99色| 精品国产一区二区三区四 | 国产又粗又硬又长又爽的视频 | 中文字幕日韩免费视频 | 99久久精品国产一区二区三区 | 亚洲男男gaygay无套 | 蜜桃av人人夜夜澡人人爽 | 黄色aa久久 | 成人性生交大片免费看中文网站 | 日韩av电影手机在线观看 | 特级大胆西西4444www | 久久免费视频播放 | 欧美国产精品久久久久久免费 | 日日干网址| 五月天色婷婷丁香 | 在线不卡视频 | 亚洲成人麻豆 | 粉嫩av一区二区三区四区 | 蜜臀久久99精品久久久久久网站 | 激情九九 | 美女av免费| 一区二区三区免费 | 激情深爱五月 | 亚洲色图色 | 日韩在线电影观看 | 日韩中文字幕免费电影 | 黄色的网站免费看 | 亚洲欧美国产精品va在线观看 | 欧美久久久久久久久 | 久草在线资源免费 | 久久亚洲私人国产精品 | 国产精品久久99综合免费观看尤物 | 日黄网站| 国产精品2019| 亚洲日韩中文字幕 | av成人免费观看 | 日免费视频 | 国产白浆视频 | 国产不卡网站 | 最新色站| 午夜精品福利影院 | 久久国产综合视频 | 国内久久久久 | 最新av网址大全 | 黄色免费av | 色国产精品一区在线观看 | 国产精品一区二区av | 欧美日韩高清不卡 | 久久久久久美女 | 久久综合欧美 | 日韩理论片 | 天天综合网 天天 | 97操操操 | 久久不见久久见免费影院 | 国产视频在线观看免费 | 午夜精品福利在线 | 97超碰人人澡人人爱 | 国产五月| 欧美精品久久久久久久久久 | 二区三区在线观看 | 97免费视频在线播放 | 97精品在线视频 | 亚洲精品视频二区 | 成人app在线免费观看 | 中文字幕日韩精品有码视频 | 伊人成人久久 | 日韩av在线一区二区 | 欧美日韩网址 | 午夜视频不卡 | 国产在线视频一区 | 97超在线 | 亚洲欧美视频在线观看 | 成人在线免费看 | 欧美性色xo影院 | 国产精品都在这里 | 国产中文字幕在线看 | 国产一区欧美一区 | av免费观看高清 | 日韩视频免费 | 免费在线观看不卡av | 日韩午夜视频在线观看 | 91精品久久久久久综合五月天 | 久久精品一区二区三区视频 | 欧美精品一区二区免费 | 国产亚洲91 | 98超碰在线| 91精品一| 国产小视频在线播放 | 亚欧日韩av | 最近中文字幕高清字幕免费mv | 天天狠狠| 91九色视频在线观看 | 亚洲国产精品资源 | 99热官网 | 在线观看国产成人av片 | 久草网在线视频 | 色天天综合久久久久综合片 | 国产综合香蕉五月婷在线 | 96超碰在线 | av福利在线 | 亚洲国产视频a | 四川妇女搡bbbb搡bbbb搡 | 午夜婷婷综合 | 国产又粗又猛又黄又爽视频 | 国产一区二区在线视频观看 | av片免费播放 | 日韩精品久久久免费观看夜色 | 国产高清在线a视频大全 | 国产高清免费视频 | 国产 亚洲 欧美 在线 | 最新真实国产在线视频 | 日韩成人免费在线电影 | 久久综合久久综合九色 | 日韩欧美在线观看一区 | 久久精品亚洲国产 | 97精品国自产拍在线观看 | 狠狠操狠狠干天天操 | 国产中文字幕亚洲 | 国产网站在线免费观看 | 美女亚洲精品 | 24小时日本在线www免费的 | 91精品国产一区二区在线观看 | 色综合天 | 美女黄久久 | 日韩在线视频观看免费 | 久久99精品国产91久久来源 | 91在线影视 | 国产精品美女久久久久久2018 | 久久国产视频网站 | 在线国产激情视频 | 成人免费xxx在线观看 | 丁香影院在线 | 日精品在线观看 | 日韩一区二区三区在线观看 | 久久久久免费观看 | 亚洲夜夜综合 | 麻豆视频网址 | 超碰公开在线观看 | 天天草av| 日本中文字幕在线播放 | 国内精品免费久久影院 | 久草91视频| 五月婷婷在线视频观看 | 日韩电影一区二区三区 | av 一区二区三区四区 | 国产一级黄色电影 | 一本之道乱码区 | 亚洲免费精品一区二区 | 91视频亚洲 | 日韩精品久久中文字幕 | 国产91精品一区二区 | 一区中文字幕在线观看 | 九九99靖品| 在线日本看片免费人成视久网 | 日韩三级视频在线看 | 日韩中文在线播放 | 丰满少妇在线观看网站 | 狠狠狠狠狠狠狠狠 | 人人艹人人 | 久热免费在线观看 | 国产日韩欧美视频在线观看 | 狠狠色丁香婷婷综合最新地址 | 日韩欧美一区二区三区黑寡妇 | 国产69精品久久app免费版 | 亚洲最大av网 | 黄色视屏在线免费观看 | 亚洲日本一区二区在线 | 久久精品亚洲 | 亚洲成人资源在线 | 91精品爽啪蜜夜国产在线播放 | 国产女人18毛片水真多18精品 | 国产精品一区二区精品视频免费看 | 在线va网站 | 91国内在线视频 | 日韩免费高清在线观看 | 在线视频区 | 波多野结衣电影一区二区 | 91网站在线视频 | 久久精品91久久久久久再现 | 久久人人爽人人人人片 | 国产免费一区二区三区最新 | 少妇精品久久久一区二区免费 | 天天操天天干天天摸 | 久99久精品视频免费观看 | 视频国产在线观看18 | 久草在线电影网 | 久久国色夜色精品国产 | 欧美极品在线播放 | 九九热免费在线视频 | 婷婷六月色 | 成人在线免费av | 久久久久久99精品 | 久久国产精品第一页 | 精品视频免费久久久看 | 五月天综合色激情 | www.夜夜操.com| 成人资源在线 | 午夜免费在线观看 | 丁香高清视频在线看看 | 永久免费av在线播放 | 日韩高清观看 | 91麻豆精品国产91久久久久久 | 成人av直播 | 97人人射 | 亚洲精品毛片一级91精品 | 2019av在线视频 | 亚洲国产精品传媒在线观看 | 国产精品69久久久久 | 夜色成人网| 天天综合网久久综合网 | 欧美少妇bbwhd | 欧美老人xxxx18 | 亚洲欧洲精品一区二区 | 久久久鲁 | 国产不卡免费av | 韩国精品福利一区二区三区 | 中文在线免费视频 | 激情视频免费在线 | 国产精品免费视频一区二区 | 国产精品区一区 | 国产亚洲视频在线免费观看 | 免费网站在线观看成人 | 日韩av在线资源 | 精品一区二区久久久久久久网站 | 成人中文字幕在线 | 插婷婷| 免费人成网ww44kk44 | 日日激情 | 国产日韩av在线 | 亚洲综合在线播放 | 久久午夜色播影院免费高清 | 久草在线这里只有精品 | 亚洲精品美女久久久 | 国产精品一区二区无线 | 激情视频网页 | 91福利小视频 | 在线观看视频免费大全 | 久久在线视频精品 | 美女av电影 | 91刺激视频| 99爱这里只有精品 | 国产精品视频免费看 | 日韩精品免费在线视频 | 亚洲高清免费在线 | 视频在线观看国产 | 日韩欧美电影在线观看 | 欧美另类xxxxx | 2021国产在线视频 | 日韩免费久久 | 久久久91精品国产一区二区三区 | 在线色网站 | 国产一级在线看 | 久久日韩精品 | 日韩视频区 | 黄色电影在线免费观看 | 国产小视频你懂的 | 亚洲精品一区二区精华 | 91免费观看视频在线 | 国产精品免费久久 | 久久高清 | 美女网站久久 | 日韩在线 一区二区 | 国产午夜三级一区二区三桃花影视 | 国产精品6 | 国产美女黄网站免费 | 在线免费看片 | 午夜精品视频福利 | 欧美一二三区在线观看 | 精品国产一区二区三区日日嗨 | 九九热久久免费视频 | 欧美日韩国语 | 精品人妖videos欧美人妖 | 中文字幕之中文字幕 | 成人动漫一区二区三区 | 精品国产精品久久一区免费式 | 韩日视频在线 | 在线观看中文字幕一区二区 | 久久久久久欧美二区电影网 | 91精品国产一区二区在线观看 | 在线免费观看黄网站 | 日本精品中文字幕 | 精品美女视频 | 久久99精品国产麻豆宅宅 | 国产高清第一页 | 成年人看片 | www.黄色片网站 | 伊人影院99| 久久精品国产99国产 | 激情欧美日韩一区二区 | 99色在线观看视频 | 日本一区二区不卡高清 | 999久久久| 久久久美女 | av日韩国产| 国产片免费在线观看视频 | 国产精品久久久久久久久免费看 | 亚洲一区欧美激情 | 欧美性生活小视频 | 99夜色| 日韩久久久久久久久 | 九热精品 | 欧美精品久 | 97成人免费 | 久草免费在线视频 | 国产午夜av| 国内精品久久久久影院男同志 | 久久国产片| www.久久久.cum | 亚洲激情六月 | 国产亚洲视频在线免费观看 | 亚洲欧洲日韩 | 日韩精品一区二区三区丰满 | 久久精品久久99 | 亚洲闷骚少妇在线观看网站 | 91手机视频| 国产精品毛片久久蜜 | 久久久久久久av | 久久经典国产 | 亚洲精品91天天久久人人 | 高清一区二区 | 超碰av在线播放 | 丁香六月久久综合狠狠色 | 91禁看片 | 久久久免费观看完整版 | 中文字幕观看av | 99在线观看 | 视频在线观看99 | 国产不卡免费av | 成人免费一级片 | 美女免费视频一区 | 久久综合激情 | 在线观看国产一区二区 | 最新中文字幕在线资源 | 五月婷婷欧美视频 | 欧美日韩国产网站 | 国产视频91在线 | 六月天色婷婷 | 99人成在线观看视频 | 夜夜爱av| 久久久精品国产免费观看一区二区 | 蜜臀久久99静品久久久久久 | 在线精品播放 | 欧美在线99 | 毛片网站免费 | 国产精品99久久久精品免费观看 | 中文字幕亚洲欧美日韩2019 | 国产精品美女久久久久久久久 | h视频在线看 | 国产一区在线视频 | 欧美美女一级片 | 国产精品一区二区白浆 | 丁香在线观看完整电影视频 | 亚洲综合色网站 | 在线观看一级片 | 精品久久久免费 | 亚洲精品福利在线观看 | 精品国产美女在线 | av综合av| 又黄又爽又色无遮挡免费 | 国产高清在线不卡 | 6080yy精品一区二区三区 | 亚洲国产精品成人精品 | 国产精品不卡av | 国产最新在线观看 | 久久66热这里只有精品 | 麻豆91精品视频 | 深夜国产在线 | 国产最新在线 | 亚洲精品66 | 96国产在线 | 久久只有精品 | 国产一区视频在线观看免费 | 国产一区二区视频在线播放 | 500部大龄熟乱视频使用方法 | 涩涩爱夜夜爱 | 日韩中文字幕在线不卡 | 精品久久久99 | 91视频麻豆视频 | 九九久久免费视频 | 激情小说 五月 | 欧美日韩国产一区二 | 九九一级片 | 韩国三级一区 | 免费日p视频 | 人人爽人人搞 | www日日夜夜 | 国产专区在线 | 福利网址在线观看 | 国产女教师精品久久av | 91中文字幕在线观看 | 操高跟美女 | 在线观看91精品国产网站 | 日韩在线视频二区 | 国产视频91在线 | 免费视频久久久 | 99精品小视频 | 久久经典国产视频 | 97香蕉超级碰碰久久免费软件 | 精品久久久网 | 久久久不卡影院 | 狠狠色伊人亚洲综合成人 | 四虎影视成人永久免费观看视频 | 国产精品福利在线观看 | 久久成人精品电影 | av日韩精品| 99精品偷拍视频一区二区三区 | 免费看黄色小说的网站 | 91在线看网站 | 97超碰在线久草超碰在线观看 | 国产91精品看黄网站 | 中文字幕精品一区二区三区电影 | av观看免费在线 | 久久尤物电影视频在线观看 | 色婷五月天 | 美女网站在线播放 | 国产一级做a爱片久久毛片a | 国产在线观看中文字幕 | 亚洲精品久久久久中文字幕二区 | 五月丁香 | 日韩免费二区 | 国产精品片 | 欧美午夜精品久久久久久浪潮 | 成人毛片一区 | 激情在线网站 | 91成人精品一区在线播放69 | 色婷婷www| 国产v视频 | 亚洲午夜久久久久久久久 | 久草爱视频 | 特级西西人体444是什么意思 | 手机看国产毛片 | 久久久福利视频 | 久久不色 | 亚洲国产精品视频在线观看 | 91在线操 | 久久国产精品偷 | 亚洲精品视频在线观看视频 | 国产小视频福利在线 | 精品久久久久久国产 | www色网站 | 日韩,精品电影 | 一级a性色生活片久久毛片波多野 | 国产黄色片网站 | 国产精品电影一区 | 欧美人体xx| 亚洲黄色片在线 | 欧美一级黄大片 | 久久久影院一区二区三区 | 欧美综合在线视频 | 国产精品一区二区白浆 | 超级碰99| 国产日韩欧美自拍 | 精品国产一区二区三区久久久蜜臀 | 99re8这里有精品热视频免费 | 国际精品久久久 | 中文字幕大全 | 国产啊v在线观看 | 日韩,精品电影 | 亚洲狠狠操 | 精品久久网| av观看久久久 | 五月婷在线观看 | 亚洲成人资源在线 | 亚洲自拍自偷 | 91中文在线视频 | 亚洲国产久 | 亚洲热久久| 91av在线不卡 | 国产成人久久精品 | 91精品国产91热久久久做人人 | 91精品国产三级a在线观看 | 日韩欧美一级二级 | 国产1区在线 | 国产精品久久久久免费 | 婷婷国产在线 | 1000部18岁以下禁看视频 | 色婷婷综合久久久久中文字幕1 | 久久精品国产一区二区 | 亚洲伊人av | 国产精品精品国产婷婷这里av | 丁香六月网| 97精品国产91久久久久久久 | 婷婷中文在线 | 欧美一级xxxx| 亚洲黄色av网址 | 午夜精品福利一区二区三区蜜桃 | 91精品视频免费看 | 91av资源在线 | 午夜久久久久 | 天天综合色网 | 一级黄色电影网站 | 一区二区三区高清在线 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | av片一区 | 欧洲不卡av| 天堂黄色片 | 不卡av电影在线观看 | 中文字幕 国产 一区 | 五月天国产 | 色综合久久88色综合天天人守婷 | 日日草视频| 一区二区三区日韩视频在线观看 | 在线蜜桃视频 | 在线播放日韩 | 91久久精品日日躁夜夜躁国产 | 国产精品国产三级国产aⅴ9色 | 亚洲精品高清视频在线观看 | 日日夜夜av | 成人福利在线 | 国产精品久久久久影院 | 九九综合九九 | 97免费视频在线播放 | 国产专区在线视频 | 国产在线一区二区三区播放 | 成年人免费在线观看网站 | 久久66热这里只有精品 | 午夜影院一级 | 日韩精品免费在线播放 | 国产在线不卡一区 | 韩日av一区二区 | 网站在线观看日韩 | 亚洲精品久久久久中文字幕m男 | 欧美日韩国产一区二 | 91九色蝌蚪视频 | 91麻豆精品国产91久久久更新时间 | a在线视频v视频 | 九九日韩| 精品免费观看 | 国产精品综合在线观看 | 国产高潮久久 | 亚洲日本国产精品 | 香蕉久草 | 精品一区二区在线观看 | 欧美福利网站 | 亚洲国产资源 | 九九色综合 | 久久伊人八月婷婷综合激情 | 国产日韩在线视频 | 久久手机精品视频 | 在线观看91网站 | 国产精品视频在线看 | 精品国产一区二区三区噜噜噜 | 人人精品 | 少妇bbb搡bbbb搡bbbb | 亚洲一区二区麻豆 | 久草在线视频网站 | 国产精品一区二区三区久久久 | 91亚洲网站 | 国产一级二级av | 天天曰 | 亚洲一区二区三区四区在线视频 | 国产天天爽 | 欧美精品少妇xxxxx喷水 | 亚洲国产精品成人女人久久 | av一区在线播放 | 在线 成人| 亚洲成人精品国产 | 亚洲黄色成人av | 欧美黑人xxxx猛性大交 | 97久久久免费福利网址 | 久久精品激情 | 亚洲午夜精品久久久 | 久久在线视频精品 | 欧美精品九九99久久 | 亚洲精品午夜一区人人爽 | 伊人色播| 中文字幕一区二区三区四区久久 | 天天操偷偷干 | 日产中文字幕 | 日韩欧美69| 日韩伦理一区二区三区av在线 | 精品国产视频一区 | 午夜精品视频福利 | 波多野结衣在线观看一区 | 欧美日韩精品免费观看视频 | 成人av高清在线 | 午夜婷婷在线播放 | 久久久久久国产精品亚洲78 | 国产精品9999久久久久仙踪林 | 精品一区精品二区高清 | 最新色站 | 中文字幕在线观看第三页 | 欧美日本啪啪无遮挡网站 | 在线欧美小视频 | 免费a级大片 | 黄色毛片一级片 | 日韩午夜电影网 | 亚洲专区中文字幕 | 午夜精品久久久久久久久久久久久久 | 在线视频18在线视频4k | 九九视频在线观看视频6 | 午夜精品久久久久 | 一级黄色电影网站 | 成人欧美日韩国产 | 亚洲黄色片 | 特级西西444www大精品视频免费看 | 精品视频不卡 | www.亚洲精品在线 | 中文字幕乱偷在线 | 在线观影网站 | 精品久久国产一区 | 中文字幕一区二区在线观看 | 日本深夜福利视频 | 91在线成人 | 国产精品去看片 | 天天色天天上天天操 | 国产精品情侣视频 | 日韩中文在线字幕 | 国产一区二区在线免费播放 | 99性视频 | 国偷自产中文字幕亚洲手机在线 | 欧美韩日精品 | 久久精品视频在线播放 | 性色av免费在线观看 | 国产99爱 | 激情五月看片 | 国产黄色免费在线观看 | 久久久免费av | 欧美日韩国产xxx | 中文字幕 成人 | 欧美日韩不卡一区二区三区 | 日日久视频 | 黄色三级免费片 | 91精品看片 | 人人射 | 日韩午夜在线观看 | 成年免费在线视频 | 日本黄色一级电影 | 激情狠狠干 | 在线观看网站你懂的 | 911久久香蕉国产线看观看 | 亚洲午夜精 | 国产精品久久久久久久久久妇女 | 国产在线精品视频 | 国产精品久久精品 | 免费欧美高清视频 | 中文字幕在线播放第一页 | 精品国产自 | 亚洲综合成人专区片 | 最新av免费在线 | 亚洲视频电影在线 | 黄色av成人在线观看 | 日韩综合一区二区 | 免费黄色在线 | 91视频免费播放 | 国产精品一区二区久久 | 日韩精品一区二区三区水蜜桃 | 国产精品亚洲视频 | 亚洲免费av在线播放 | 日日爱影视 | 特级a老妇做爰全过程 | 97色国产 | 日韩在线首页 | 国产精品久久久精品 | 久久精品波多野结衣 | www.夜夜操.com | 国产一区视频在线播放 | 9999激情 | 国产一性一爱一乱一交 | 国产一区欧美在线 | 精品免费 | 天天爱天天操天天干 | 久久国产精品二国产精品中国洋人 | 国产黄网站在线观看 | 欧美精品黑人性xxxx | 日本午夜在线观看 | 精品久久久久一区二区国产 | 日韩乱码中文字幕 | 韩国一区在线 | 国产麻豆精品一区二区 | 又黄又爽又色无遮挡免费 | 久久国产精品色婷婷 | 天天射天天色天天干 | 中文字幕av免费观看 | 亚洲久久视频 | 成人免费精品 | 99欧美 | 色婷婷综合久久久 | 日韩精品最新在线观看 | 久久一二三四 | 精品视频99| 中文在线亚洲 | 国产精品短视频 | 亚洲一区美女视频在线观看免费 | 国产成人精品av在线 | 国产在线观看,日本 | 欧美精品v国产精品 | 97视频免费看| 国产福利在线 | 久久综合五月天 | 国产精品一区二区果冻传媒 | 日韩精品在线一区 | 97视频播放 | 国产一区免费看 | av免费看在线 | 天天做日日爱夜夜爽 | 免费高清看电视网站 | 人人看人人艹 | 免费视频网| 国产精品久久久区三区天天噜 | 免费成人在线观看视频 | 96av在线| 狠狠黄| 天天色天天操天天爽 | av在线一 | 免费av福利 | 91丨九色丨丝袜 | 在线视频福利 | 在线观看免费中文字幕 | 激情五月综合 | 亚洲一区二区视频在线播放 | 国产亚洲视频中文字幕视频 | 免费精品视频在线观看 | 精品国产自在精品国产精野外直播 | 久一久久| 婷婷.com| 日韩中文字幕国产精品 | 韩国av电影网| 久久精品永久免费 | 97成人超碰 | 中文字幕免费久久 | 91人人澡 | 久久看毛片 | 五月天综合网站 | 国产一级片免费观看 | 人人看黄色 | 日韩 在线a | 日韩电影在线视频 | av在线影片 | 国产精品福利无圣光在线一区 | 久久久久久久久久久电影 | 国产亚洲婷婷 | 日韩试看 | 国产香蕉久久 | 日韩综合一区二区三区 | 亚洲永久在线 | 日韩欧美视频免费看 | a在线免费 | 亚洲视频久久久 | 欧美激情综合五月色丁香小说 | 又紧又大又爽精品一区二区 | 成年人黄色免费看 | 国产成人精品一区二区三区免费 | 日韩精品一区二区三区水蜜桃 | 黄色avwww | 在线黄色国产电影 | 久久激情小视频 | 日本黄色免费看 | 成年人视频在线免费播放 | 91黄色视屏 | 色播五月激情五月 | 777xxx欧美 | 国产精品久久99精品毛片三a | 日韩中文字幕电影 | 免费观看91视频大全 | 亚洲午夜久久久久 | 九九在线国产视频 | 911精品美国片911久久久 | 日本中文字幕在线播放 | 久草观看视频 | 色婷婷久久久综合中文字幕 | 人人爽人人爽 | 97成人在线 |