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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

tornado项目搭建_Day71-73 BBS项目(1)

發(fā)布時(shí)間:2025/3/20 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 tornado项目搭建_Day71-73 BBS项目(1) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

  • 1、項(xiàng)目開發(fā)流程
  • 2、bbs表設(shè)計(jì)
  • 3、數(shù)據(jù)庫(kù)表創(chuàng)建及同步
  • 4、注冊(cè)功能
    • forms組件
    • 注冊(cè)頁(yè)面
  • 5、登錄功能
    • 實(shí)現(xiàn)圖片驗(yàn)證碼
  • 6、搭建BBS首頁(yè)導(dǎo)航條
    • 修改密碼
    • 退出登錄
  • 7、admin后臺(tái)管理
  • 8、首頁(yè)文章展示
    • media配置及用戶頭像展示
  • 9、圖片防盜鏈
  • 10、個(gè)人站點(diǎn)頁(yè)面搭建

1、項(xiàng)目開發(fā)流程

  • 需求分析
    架構(gòu)師+產(chǎn)品經(jīng)理+開發(fā)組組長(zhǎng),在跟客戶溝通交流中引導(dǎo)客戶往我們之前想好的方案上靠。形成一個(gè)初步的方案
  • 項(xiàng)目設(shè)計(jì)
    架構(gòu)師進(jìn)行項(xiàng)目設(shè)計(jì):
    編程語(yǔ)言的選擇、
    框架的選擇(flask、Django、Tornado)、
    數(shù)據(jù)庫(kù)的選擇(主庫(kù)mysql postgresql、緩存數(shù)據(jù)庫(kù)redis MongoDB memcache)、
    功能劃分(將項(xiàng)目劃分成幾個(gè)模塊)、
    組長(zhǎng)開會(huì)(分發(fā)任務(wù))、
    項(xiàng)目報(bào)價(jià)
  • 分組開發(fā)
    組長(zhǎng)找組員開會(huì),安排各自功能模塊,我們就是在架構(gòu)師設(shè)計(jì)好的框架中填寫自己的代碼
  • 測(cè)試
    測(cè)試部門對(duì)代碼進(jìn)行壓力測(cè)試
  • 交付上線
    交給運(yùn)維人員
  • 2、BBS表設(shè)計(jì)(https://www.cnblogs.com/)

    一個(gè)項(xiàng)目中最重要的不是業(yè)務(wù)邏輯的書寫而是前期表的設(shè)計(jì),只要將表設(shè)計(jì)好了,后續(xù)功能書寫才會(huì)一帆風(fēng)順。

  • 用戶表
    繼承AbstractUser
    擴(kuò)展字段:phoneavatarcreate_time
    外鍵字段:
    一對(duì)一“個(gè)人站點(diǎn)表”
  • 個(gè)人站點(diǎn)表
    site_namesite_title|site_theme
  • 文章標(biāo)簽表
    name
    外鍵字段:
    一對(duì)多“個(gè)人站點(diǎn)表”
  • 文章分類表
    name
    外鍵字段:
    一對(duì)多“個(gè)人站點(diǎn)表”
  • 文章表
    titledesc文章簡(jiǎn)介content文章內(nèi)容create_time發(fā)布時(shí)間
    數(shù)據(jù)庫(kù)字段設(shè)計(jì)優(yōu)化(雖然點(diǎn)贊數(shù)點(diǎn)踩數(shù)評(píng)論數(shù)可以從其他表跨表查詢得到,但是頻繁跨表效率低)
    up_num點(diǎn)贊數(shù)down_num點(diǎn)踩數(shù)comment_num評(píng)論數(shù)(在點(diǎn)贊點(diǎn)踩表評(píng)論表增加數(shù)據(jù)時(shí),給這三個(gè)普通字段數(shù)值同步更新+1)
    外鍵字段:
    一對(duì)多“個(gè)人站點(diǎn)表”
    多對(duì)多“文章標(biāo)簽表“
    一對(duì)多”文章分類表”
  • 點(diǎn)贊點(diǎn)踩表(記錄哪個(gè)用戶給哪篇文章點(diǎn)了贊還是點(diǎn)了踩)
    user ForeignKey(to='User')
    article ForeignKey(to='Article')
    is_up BooleanField()
  • 文章評(píng)論表
    user ForeignKey(to='User')
    article ForeignKey(to='Article')
    content CharField()
    comment_time DateField()
    # 自關(guān)聯(lián)
    # parent ForeignKey(to='comment',null=True)
    # ORM專門提供的自關(guān)聯(lián)的寫法
    parent ForeignKey(to='self',null=True)
    根評(píng)論:直接評(píng)論當(dāng)前發(fā)布的內(nèi)容
    子評(píng)論:評(píng)論別人的評(píng)論
    (根評(píng)論與子評(píng)論是一對(duì)多的關(guān)系)
  • 3、數(shù)據(jù)庫(kù)表創(chuàng)建及同步

    配置MySQL數(shù)據(jù)庫(kù)參數(shù)

    DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'bbs','USER':'root','PASSWORD':'dingding','PORT':'3306','HOST':'127.0.0.1','CHARSET':'utf8'} }

    init文件中進(jìn)行代碼聲明:

    import pymysql pymysql.install_as_MySQLdb()

    models.py文件

    from django.db import models# Create your models here. # 創(chuàng)建表:先寫普通字段,再寫外鍵字段from django.contrib.auth.models import AbstractUserclass UserInfo(AbstractUser):phone = models.BigIntegerField(verbose_name='手機(jī)號(hào)',null=True)# 頭像# 給avatar字段傳文件對(duì)象,該文件會(huì)自動(dòng)存儲(chǔ)到avatar文件夾下,設(shè)置一個(gè)默認(rèn)頭像avatar = models.FileField(upload_to='avatar/',default='avatar/default.jpg',verbose_name='用戶頭像')create_time = models.DateField(auto_now_add = True)# 一對(duì)一關(guān)系blog = models.OneToOneField(to='Blog',null=True)class Blog(models.Model):site_name = models.CharField(max_length=32,verbose_name='站點(diǎn)名稱')site_title = models.CharField(max_length=32,verbose_name='站點(diǎn)標(biāo)題')# site_theme站點(diǎn)樣式中存儲(chǔ)css/js的文件路徑site_theme = models.CharField(max_length=64,verbose_name='站點(diǎn)樣式')class Category(models.Model):name = models.CharField(max_length=32,verbose_name='文章分類')# 外鍵字段blog = models.ForeignKey(to='Blog',null=True)class Tag(models.Model):name = models.CharField(max_length=32,verbose_name='文章標(biāo)簽')blog = models.ForeignKey(to='Blog',null=True)def __str__(self):return self.nameclass Article(models.Model):title = models.CharField(max_length=64,verbose_name='文章標(biāo)題')desc = models.CharField(max_length=255,verbose_name='文章簡(jiǎn)介')# 文章內(nèi)容一般用TextFieldcontent = models.TextField(verbose_name='文章內(nèi)容')create_time = models.DateField(auto_now_add=True)# 數(shù)據(jù)庫(kù)字段優(yōu)化設(shè)計(jì)up_num = models.BigIntegerField(default=0,verbose_name='點(diǎn)贊數(shù)')down_num = models.BigIntegerField(default=0,verbose_name='點(diǎn)踩數(shù)')comment_num = models.BigIntegerField(default=0,verbose_name='評(píng)論數(shù)')# 外鍵字段blog = models.ForeignKey(to='Blog', null=True)category = models.ForeignKey(to='Category', null=True)tags = models.ManyToManyField(to='Tag',through='Article2Tag',through_fields=('article','tag'))class Article2Tag(models.Model):article = models.ForeignKey(to='Article')tag = models.ForeignKey(to='Tag')class UpAndDown(models.Model):user = models.ForeignKey(to = 'UserInfo')article = models.ForeignKey(to = 'Article')is_up = models.BooleanField(verbose_name='是否點(diǎn)贊')class Comment(models.Model):user = models.ForeignKey(to = 'UserInfo')article = models.ForeignKey(to = 'Article')content = models.CharField(max_length=255,verbose_name='評(píng)論內(nèi)容')comment_time = models.DateTimeField(verbose_name='評(píng)論時(shí)間',auto_now_add=True)# 自關(guān)聯(lián)parent = models.ForeignKey(to='self',null=True)

    到settings文件中添加代碼:AUTH_USERMODEL = 'app01.UserInfo'
    告訴Django用UserInfo替代auth_user表。

    然后執(zhí)行數(shù)據(jù)庫(kù)遷移命令。

    4、注冊(cè)功能

    forms組件

    我們之前是直接在views.py中書寫的forms組件代碼,但是為了解耦合,應(yīng)該將所有的forms組件代碼單獨(dú)寫到一個(gè)地方。

    如果你的項(xiàng)目自始至終只用到一個(gè)forms組件,那么建一個(gè)py文件即可。但是如果你的項(xiàng)目需要使用很多個(gè)forms組件,那么可以創(chuàng)建一個(gè)文件夾,在文件夾內(nèi)根據(jù)forms組件功能的不同創(chuàng)建不同的py文件(userform.pyorderform.py).

    app01文件夾下創(chuàng)建myforms.py文件:

    from django import forms from app01 import models# 書寫針對(duì)用戶表的forms組件代碼 class MyForm(forms.Form):username = forms.CharField(label='用戶名', min_length=3, max_length=8,error_messages={'required': '用戶名不能為空','min_length': '用戶名最少3位數(shù)','max_length': '用戶名最多8位數(shù)',},# 讓標(biāo)簽有bootstrap的樣式widget=forms.widgets.TextInput(attrs={'class': 'form-control'}))password = forms.CharField(min_length=3, max_length=8, label='密碼',error_messages={'required': '密碼不能為空','min_length': '密碼最少3位','max_length': '密碼最多8位'},widget=forms.widgets.PasswordInput(attrs={'class': 'form-control'}))confirm_password = forms.CharField(min_length=3, max_length=8, label='確認(rèn)密碼',error_messages={'required': '密碼不能為空','min_length': '密碼最少3位','max_length': '密碼最多8位'},widget=forms.widgets.PasswordInput(attrs={'class': 'form-control'}))email = forms.EmailField(label='郵箱',error_messages={'invalid': '郵箱格式不正確','required': '郵箱不能為空'},widget=forms.widgets.EmailInput(attrs={'class': 'form-control'}))# 鉤子函數(shù)# 局部鉤子:校驗(yàn)用戶名是否存在def clean_username(self):username = self.cleaned_data.get('username')# 去數(shù)據(jù)庫(kù)中校驗(yàn)is_exist = models.UserInfo.objects.filter(username=username)if is_exist:# 提示信息self.add_error('username', '用戶名已存在')return username# 全局鉤子:校驗(yàn)兩次密碼是否一致def clean(self):password = self.cleaned_data.get('password')confirm_password = self.cleaned_data.get('confirm_password')if not password == confirm_password:self.add_error('confirm_password', '兩次密碼不一致')return self.cleaned_data注冊(cè)頁(yè)面

    views.py文件:

    from django.shortcuts import render,HttpResponse from app01.myforms import MyRegForm from app01 import models from django.http import JsonResponse # Create your views here.def register(request):form_obj = MyRegForm()if request.method == 'POST':back_dic = {'code':1000,'msg':''}form_obj = MyRegForm(request.POST)if form_obj.is_valid():# print(form_obj.cleaned_data)# 得到四個(gè)鍵值對(duì)# {'username': 'jack', 'password': '123', 'confirm_password': '123', 'email': '123@qq.com'}# 將校驗(yàn)通過(guò)的數(shù)據(jù)字典賦值個(gè)一個(gè)變量clean_data = form_obj.cleaned_data# 將字典中的confirm_password鍵值對(duì)刪除clean_data.pop('confirm_password')# 獲取用戶頭像file_obj = request.FILES.get('avatar')# 針對(duì)用戶頭像一定要判斷是否傳值,不能直接添加到字典中去if file_obj:clean_data['avatar'] = file_obj# 直接操作數(shù)據(jù)庫(kù)保存數(shù)據(jù)models.UserInfo.objects.create_user(**clean_data)# 注冊(cè)成功之后要跳轉(zhuǎn)到一個(gè)登錄界面,所以給這個(gè)前后端交互的字典加上一個(gè)urlback_dic['url'] = '/login/'else:back_dic['code'] = 2000back_dic['msg'] = form_obj.errorsreturn JsonResponse(back_dic) # 將這個(gè)字典返回給回調(diào)函數(shù)return render(request,'register.html',locals())

    register.html頁(yè)面

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title><script src="jQuery.js"></script><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script><link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet"><script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script></head> <body> <div class="container-fluid"><div class="row"><div class="col-md-8 col-md-offset-2"><h1 class="text-center">注冊(cè)頁(yè)面</h1>{# 里我們不用form表單提交數(shù)據(jù),只是單純用一下form標(biāo)簽,#}{# 之后在ajax請(qǐng)求中會(huì)用到$('#myform').serializeArray()這個(gè)方法,能夠獲取到form標(biāo)簽內(nèi)所有用戶普通鍵值對(duì)數(shù)據(jù) :[{},{},{},{}]#}<form id="myform">{% csrf_token %}{% for form in form_obj %}<div class="form-group">{# form.auto_id找到標(biāo)簽所對(duì)應(yīng)的id值#}<label for="{{ form.auto_id }}">{{ form.label }}:</label>{{ form }}<span style="color: red" class="pull-right"></span></div>{% endfor %}{# 手動(dòng)渲染獲取用戶頭像的標(biāo)簽#}<div class="form-group"><label for="myfile">頭像{% load static %}<img id="myimg" src="{% static 'img/default.jpg' %}" alt="" width="80" style="margin-left: 1px">{# 只要是點(diǎn)擊label內(nèi)的內(nèi)容,都會(huì)跳轉(zhuǎn)到for指定的標(biāo)簽上 #}</label><input type="file" id="myfile" name="avatar" style="display: none"></div>{# 不要寫submit,會(huì)出發(fā)form表單的提交#}<input id="id_commit" type="button" value="注冊(cè)" class="btn btn-primary pull-right"></form></div></div> </div><script>// 實(shí)時(shí)展示用戶頭像:$('#myfile').change(function () {// 文件閱讀器對(duì)象// 1、先生成一個(gè)文件閱讀器對(duì)象let myFileReaderObj = new FileReader();// 2、獲取用戶上傳的頭像文件let fileobj = $(this)[0].files[0];// 3、將文件對(duì)象交給閱讀器對(duì)象myFileReaderObj.readAsDataURL(fileobj)// 這是一個(gè)異步操作 IO操作,所以要等待文件閱讀器讀取完畢之后再進(jìn)行文件的展示,否則頭像不顯示// 需要用到onload功能// 4、利用文件閱讀器將文件展示到前端頁(yè)面// 修改src屬性myFileReaderObj.onload = function(){$('#myimg').attr('src',myFileReaderObj.result)}}){#發(fā)送ajax請(qǐng)求,我們的數(shù)據(jù)中既包含普通鍵值對(duì),也包含文件,所以用到了FormData內(nèi)置對(duì)象#}$('#id_commit').click(function(){let formDataObj = new FormData();// 1、添加普通鍵值對(duì)$.each($('#myform').serializeArray(),function (index,obj) {formDataObj.append(obj.name,obj.value)})// 2、添加文件數(shù)據(jù)formDataObj.append('avatar',$('#myfile')[0].files[0]);// 3、發(fā)送ajax請(qǐng)求$.ajax({url:"",type:'post',data:formDataObj,// 需要指定兩個(gè)關(guān)鍵性的參數(shù)contentType:false,processData:false,success:function(args){if (args.code == 1000){// 跳轉(zhuǎn)到登錄頁(yè)面window.location.href = args.url} else{// 將對(duì)應(yīng)的錯(cuò)誤提示展示到對(duì)應(yīng)的input框后面// forms組件渲染的標(biāo)簽的ID值都是:id_字段名$.each(args.msg,function (index,obj) {let targetId = '#id_'+index;$(targetId).next().text(obj[0]).parent().addClass('has-error')})}}})})// 當(dāng)框變成紅色并且有錯(cuò)誤提示時(shí),要達(dá)到鼠標(biāo)點(diǎn)擊框則紅色框錯(cuò)誤提示都消失的效果:// 給所有的input框綁定獲取焦點(diǎn)事件$('input').focus(function () {// 將input下面的span標(biāo)簽和input外面的div標(biāo)簽修改內(nèi)容及屬性// jQuery的鏈?zhǔn)讲僮?(this).next().text('').parent().removeClass('has-error')}) </script> </body> </html>

    5、登陸功能

    urls.py文件

    from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [url(r'^admin/', admin.site.urls),url(r'^register/',views.register,name='reg'),url(r'^login/',views.login,name='login'),# 圖片驗(yàn)證碼相關(guān)操作url(r'^get_code/',views.get_code,name='get_code') ]

    views.py文件

    from django.shortcuts import render,HttpResponse from app01.myforms import MyRegForm from app01 import models from django.http import JsonResponse from django.contrib import authdef login(request):if request.method == 'POST':# 針對(duì)ajax的前后端交互,通常會(huì)定義一個(gè)字典back_dic = {'code':1000,'msg':''}username = request.POST.get('username')password = request.POST.get('password')code = request.POST.get('code')# 校驗(yàn)驗(yàn)證碼是否正確if request.session.get('code').upper() == code.upper(): # 都轉(zhuǎn)成大寫來(lái)比較(忽略大小寫)# 校驗(yàn)用戶名和密碼是否正確user_obj = auth.authenticate(request,username=username,password=password)if user_obj:# 保存用戶狀態(tài)auth.login(request,user_obj)# 校驗(yàn)成功的話,給字典增加一個(gè)url,之后再跳轉(zhuǎn)到home首頁(yè)back_dic['url'] = '/home/'else:back_dic['code'] = 2000back_dic['msg'] = '用戶名或密碼錯(cuò)誤'else:back_dic['code'] = 3000back_dic['msg'] = '驗(yàn)證碼錯(cuò)誤'return JsonResponse(back_dic)return render(request,'login.html')# 圖片相關(guān)的模塊 from PIL import Image,ImageDraw,ImageFont # Image:生成圖片 # ImageDraw:在圖片上寫字 # ImageFont:控制字體樣式 from io import BytesIO,StringIO # 內(nèi)存管理器模塊 # BytesIO:臨時(shí)幫你存儲(chǔ)數(shù)據(jù),返回時(shí)數(shù)據(jù)是二進(jìn)制 # StringIO:臨時(shí)幫你存儲(chǔ)數(shù)據(jù),返回時(shí)數(shù)據(jù)是字符串import random def get_random():return random.randint(0,255),random.randint(0,255),random.randint(0,255)def get_code(request):# 推導(dǎo)步驟1:直接獲取后端現(xiàn)成的圖片二進(jìn)制數(shù)據(jù)發(fā)送給前端,圖片局限于本地# with open(r'/Users/dingding/PycharmProjects/day72_BBS/static/img/default.jpg','rb') as f:# data = f.read()# return HttpResponse(data)# 推導(dǎo)步驟2:利用pillow模塊動(dòng)態(tài)產(chǎn)生圖片,io操作頻繁,效率低# img_obj = Image.new('RGB',(430,35),'red')# img_obj = Image.new('RGB',(430,35),get_random())# 先將圖片對(duì)象保存起來(lái)# with open('x.png','wb') as f:# img_obj.save(f,'png')# 再將圖片對(duì)象讀取出來(lái)# with open('x.png','rb') as f:# data = f.read()# return HttpResponse(data)# 推導(dǎo)步驟3:# img_obj = Image.new('RGB', (430, 35), get_random())# 生成一個(gè)io內(nèi)存管理器對(duì)象,可以看成是文件句柄# io_obj = BytesIO()# img_obj.save(io_obj,'png') # 要指定圖片的格式# 從內(nèi)存管理器中讀取二進(jìn)制的圖片數(shù)據(jù)返回給前端# return HttpResponse(io_obj.getvalue())# 最終步驟4:寫圖片驗(yàn)證碼img_obj = Image.new('RGB', (430, 35), get_random())# 產(chǎn)生一個(gè)畫筆對(duì)象img_draw = ImageDraw.Draw(img_obj)# 字體樣式(.ttf格式的文件)img_font = ImageFont.truetype('static/font/楊任東竹石體-Semibold.ttf',30) # 要加上字體大小# 接下來(lái)產(chǎn)生隨機(jī)驗(yàn)證碼(包含5位數(shù)的數(shù)字、大寫小寫字母)code = ''for i in range(5):random_upper = chr(random.randint(65,90)) # chr會(huì)將數(shù)字通過(guò)ASCII表轉(zhuǎn)成數(shù)字對(duì)應(yīng)的字母random_lower = chr(random.randint(97,122))random_int = str(random.randint(0,9)) # 轉(zhuǎn)成字符串# 從上面3個(gè)隨機(jī)選擇一個(gè)tmp = random.choice([random_upper,random_lower,random_int])# 將產(chǎn)生的隨機(jī)字符串一個(gè)個(gè)寫入到圖片上(一個(gè)個(gè)寫可以控制每個(gè)字之間的間隙,生成之后再寫就沒(méi)法控制間隙了)img_draw.text((i*60+50,0),tmp,get_random(),img_font)code += tmpprint(code)# 隨機(jī)驗(yàn)證碼在登錄的視圖函數(shù)中需要用到,要進(jìn)行校驗(yàn),所以需要存起來(lái),并且其他視圖函數(shù)也要能拿到,可以存到session中。request.session['code'] = codeio_obj = BytesIO()img_obj.save(io_obj,'png')return HttpResponse(io_obj.getvalue())

    login.html頁(yè)面

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title><script src="jQuery.js"></script><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script><link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet"><script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>{% load static %} </head> <body> <div class="container-fluid"><div class="row"><div class="col-md-8 col-md-offset-2"><h1 class="text-center">登錄頁(yè)面</h1><div class="form-group"><label for="username">用戶名</label><input type="text" name="username" id="username" class="form-control"></div><div class="form-group"><label for="password">密碼</label><input type="password" name="password" id="password" class="form-control"></div><div class="form-group"><label for="">驗(yàn)證碼</label><div class="row"><div class="col-md-6 col-xs-6"><input type="text" name="code" id="id_code" class="form-control"></div><div class="col-md-6 col-xs-6">{# <img src="{% static 'img/default.jpg' %}" alt="" height="35" width="350" >#}{# 動(dòng)態(tài)展示驗(yàn)證碼圖片,這個(gè)頁(yè)面只要一加載出來(lái)就會(huì)朝/get_code/這個(gè)頁(yè)面發(fā)get請(qǐng)求#}{# 給這個(gè)圖片驗(yàn)證碼綁定一個(gè)點(diǎn)擊事件,使得點(diǎn)擊后圖片會(huì)刷新#}<img id="get_code" src="/get_code/" alt="" height="35" width="350"></div></div></div><input id="id_commit" type="button" class="btn btn-success pull-right" value="登陸"><span style="color: red" id="error"></span></div></div> </div> <script>$('#get_code').click(function(){// 1、先獲取標(biāo)簽之前的srclet oldVal = $(this).attr('src');$(this).attr('src',oldVal += '?')})// 點(diǎn)擊登錄按鈕發(fā)送ajax請(qǐng)求$('#id_commit').click(function(){$.ajax({url:'',type:'post',data:{'username':$('#username').val(),'password':$('#password').val(),'code':$('#id_code').val(),'csrfmiddlewaretoken':'{{ csrf_token }}'},success:function (args) {if (args.code == 1000){// 跳轉(zhuǎn)到首頁(yè)window.location.href = args.url}else{// 渲染錯(cuò)誤信息$('#error').text(args.msg)}}})}) </script> </body> </html>

    補(bǔ)充:img標(biāo)簽src屬性后面可以寫的內(nèi)容:
    1、直接寫網(wǎng)絡(luò)圖片地址
    2、url后綴(自動(dòng)朝該url發(fā)送get請(qǐng)求獲取數(shù)據(jù))
    3、圖片二進(jìn)制數(shù)據(jù)

    6、搭建BBS首頁(yè)導(dǎo)航條

    導(dǎo)航條以及修改密碼、退出登錄功能

    views.py文件

    def home(request):return render(request,'home.html')@ login_required def set_password(request):# 直接判斷是不是ajax請(qǐng)求,只處理ajax請(qǐng)求if request.is_ajax():back_dic = {'code':1000,'msg':''}if request.method == 'POST':old_password = request.POST.get('old_password')new_password = request.POST.get('new_password')confirm_new_password = request.POST.get('confirm_new_password')is_right = request.user.check_password(old_password) # 自動(dòng)轉(zhuǎn)成加密密碼并校驗(yàn)if is_right:if new_password == confirm_new_password:request.user.set_password(new_password)request.user.save()back_dic['msg'] = '密碼修改成功'else:back_dic['code'] = 1001back_dic['msg'] = '兩次密碼輸入不一致'else:back_dic['code'] = 1002back_dic['msg'] = '原密碼錯(cuò)誤'return JsonResponse(back_dic)@login_required def logout(request):auth.logout(request)# 注銷后重定向到home頁(yè)面return redirect('/home/')

    home.html頁(yè)面

    <body> <nav class="navbar navbar-inverse"><div class="container-fluid"><!-- Brand and toggle get grouped for better mobile display --><div class="navbar-header"><button type="button" class="navbar-toggle collapsed" data-toggle="collapse"data-target="#bs-example-navbar-collapse-1" aria-expanded="false"><span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a class="navbar-brand" href="#">BBS</a></div><!-- Collect the nav links, forms, and other content for toggling --><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav"><li class="active"><a href="#">博客 <span class="sr-only">(current)</span></a></li><li><a href="#">文章</a></li><li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"aria-expanded="false"> 更多<span class="caret"></span></a><ul class="dropdown-menu"><li><a href="#">Action</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><li role="separator" class="divider"></li><li><a href="#">One more separated link</a></li></ul></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">{# 根據(jù)用戶是否登錄顯示的內(nèi)容也不一樣#}{% if request.user.is_authenticated %}<li><a href="#">{{ request.user.username }}</a></li><li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"aria-expanded="false">更多<span class="caret"></span></a><ul class="dropdown-menu"><li><a href="#" data-toggle="modal" data-target=".bs-example-modal-lg">修改密碼</a></li><li><a href="#">修改頭像</a></li><li><a href="#">后臺(tái)管理</a></li><li role="separator" class="divider"></li><li><a href="{% url 'logout' %}">退出登錄</a></li></ul><!-- Large modal --><div class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog"aria-labelledby="myLargeModalLabel"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><h1 class="text-center">修改密碼</h1><div class="row"><div class="col-md-8 col-md-offset-2"><div class="form-group"><label for="">用戶名</label><input type="text" disabled value="{{ request.user.username }}"class="form-control"></div><div class="form-group"><label for="">原密碼</label><input type="text" id="id_old_password" class="form-control"></div><div class="form-group"><label for="">新密碼</label><input type="text" id="id_new_password" class="form-control"></div><div class="form-group"><label for="">確認(rèn)密碼</label><input type="text" id="id_confirm_new_password" class="form-control"></div><div class="modal-footer"><button id="id_edit" type="button" class="btn btn-primary">修改</button><button type="button" class="btn btn-default" data-dismiss="modal">取消</button><span id="password_errors" style="color: red"></span></div></div></div></div></div></div></li>{% else %}<li><a href="{% url 'reg' %}">注冊(cè)</a></li><li><a href="{% url 'login' %}">登錄</a></li>{% endif %}</ul></div><!-- /.navbar-collapse --></div><!-- /.container-fluid --> </nav><script>// 給修改按鈕綁定一個(gè)點(diǎn)擊事件$('#id_edit').click(function () {$.ajax({url: '/set_password/',type: 'post',data: {'old_password': $('#id_old_password').val(),'new_password': $('#id_new_password').val(),'confirm_new_password': $('#id_confirm_new_password').val(),'csrfmiddlewaretoken': '{{ csrf_token }}'},success: function (args) {if (args.code == 1000) {window.location.reload() // 如果修改成功可以刷新一下頁(yè)面或者跳轉(zhuǎn)到登錄頁(yè)面讓用戶重新登錄} else {$("#password_errors").text(args.msg)}}})}) </script> </body>

    7、admin后臺(tái)管理

    先創(chuàng)建一個(gè)超級(jí)管理員:createsuperuser。
    Django給你提供了一個(gè)管理員可視化界面讓你方便的對(duì)模型表進(jìn)行增刪改查操作。
    如果你想要使用admin后臺(tái)管理操作這些模型表,就需要先注冊(cè)你的模型表(告訴admin你需要操作哪些模型表)。

    注冊(cè)模型表app01/admin.py文件:

    from django.contrib import admin from app01 import models # Register your models here. admin.site.register(models.UserInfo) admin.site.register(models.Blog) admin.site.register(models.Category) admin.site.register(models.Tag) admin.site.register(models.Article) admin.site.register(models.Article2Tag) admin.site.register(models.UpAndDown) admin.site.register(models.Comment)

    修改admin后臺(tái)管理默認(rèn)顯示的表名,models.py文件后面加上class Meta::

    from django.db import models from django.contrib.auth.models import AbstractUserclass UserInfo(AbstractUser):phone = models.BigIntegerField(verbose_name='手機(jī)號(hào)',null=True,blank=True)# null=True 表示數(shù)據(jù)庫(kù)中該字段可以為空# blank=True 表示admin后臺(tái)管理該字段可以為空# 頭像# 給avatar字段傳文件對(duì)象,該文件會(huì)自動(dòng)存儲(chǔ)到avatar文件夾下,設(shè)置一個(gè)默認(rèn)頭像avatar = models.FileField(upload_to='avatar/',default='avatar/default.jpg',verbose_name='用戶頭像')create_time = models.DateField(auto_now_add = True)# 一對(duì)一關(guān)系blog = models.OneToOneField(to='Blog',null=True)class Meta:# verbose_name = '用戶表' # admin后臺(tái)管理默認(rèn)顯示的表名后面會(huì)加sverbose_name_plural = '用戶表' # 修改admin后臺(tái)管理默認(rèn)顯示的表名def __str__(self):return self.username

    admin會(huì)給每一個(gè)注冊(cè)了的模型表自動(dòng)生成增刪改查四條url:
    以UserInfo表為例:http://127.0.0.1:8000/admin/app01/userinfo/add/http://127.0.0.1:8000/admin/app01/userinfo/1/delete/http://127.0.0.1:8000/admin/app01/userinfo/1/change/
    http://127.0.0.1:8000/admin/app01/userinfo/

    數(shù)據(jù)綁定需要注意的是:
    先去文章表綁定數(shù)據(jù)
    個(gè)人站點(diǎn)
    文章分類
    將用戶和個(gè)人站點(diǎn)綁定關(guān)系標(biāo)簽和文章(不要把別人的文章綁定到其他人的標(biāo)簽)。

    admin后臺(tái)管理?www.bilibili.com

    8、首頁(yè)文章展示

    media配置

    網(wǎng)站所使用的靜態(tài)文件默認(rèn)放在static文件夾下,用戶上傳的靜態(tài)文件也應(yīng)該保存下來(lái)。
    media配置:該配置可以讓用戶上傳的所有文件都固定存放在某一個(gè)指定的文件夾下。
    在settings.py文件中配置:

    # 配置用戶上傳的文件存儲(chǔ)位置 MEDIA_ROOT = os.path.join(BASE_DIR,'media') # 文件名可修改

    等下次用戶上傳了文件時(shí),系統(tǒng)會(huì)自動(dòng)在根目錄下生成文件夾media/avatar/存放文件。我們之前在根目錄下手動(dòng)創(chuàng)建的avatar文件夾就不需要了。

    如何開設(shè)后端指定文件夾資源

    urls.py中增加代碼:

    from django.conf.urls import url from django.contrib import admin from app01 import views from django.views.static import serve from day72_BBS import settingsurlpatterns = [url(r'^admin/', admin.site.urls),url(r'^register/',views.register,name='reg'),url(r'^login/',views.login,name='login'),# 圖片驗(yàn)證碼相關(guān)操作url(r'^get_code/',views.get_code,name='get_code'),# 首頁(yè)url(r'^home/',views.home,name='home'),# 退出登錄url(r'^logout/',views.logout,name='logout'),# 修改密碼url(r'^set_password/',views.set_password,name='set_password'),# 暴露后端指定文件夾資源(MEDIA_ROOT的路徑)# 固定寫法,不要自己改動(dòng)url(r'^media/(?P<path>.*)',serve,{'document_root':settings.MEDIA_ROOT}) ]

    home.html首頁(yè)文章展示部分代碼:

    <div class="container-fluid"><div class="col-md-2 col-xs-2"><div class="panel panel-warning"><div class="panel-heading"><h3 class="panel-title">廣告1</h3></div><div class="panel-body">內(nèi)容1</div></div><div class="panel panel-danger"><div class="panel-heading"><h3 class="panel-title">廣告2</h3></div><div class="panel-body">內(nèi)容2</div></div><div class="panel panel-info"><div class="panel-heading"><h3 class="panel-title">廣告3</h3></div><div class="panel-body">內(nèi)容3</div></div></div><div class="col-md-8 col-xs-8">{# 文章展示 #}<ul class="media-list">{% for article_obj in article_queryset %}<li class="media"><h4 class="media-heading"><a href="">{{ article_obj.title }}</a></h4><div class="media-left"><a href="#">{# 圖片的路徑需要我們手動(dòng)加上media前綴#}<img class="media-object" src="/media/{{ article_obj.blog.userinfo.avatar }}" alt="..." width="60"height="60"></a></div><div class="media-body">{{ article_obj.desc }}</div><br><div>{# 通過(guò)文章拿到用戶對(duì)象#}<span><a href="">{{ article_obj.blog.userinfo.username }}</a></span><span>&nbsp;發(fā)布于&nbsp;</span><span><a href="">&nbsp;{{ article_obj.create_time|date:"Y-m-d" }}&nbsp;</a></span><span><span class="glyphicon glyphicon-comment"></span>&nbsp;評(píng)論({{ article_obj.comment_num }})&nbsp;</span><span><span class="glyphicon glyphicon-thumbs-up"></span>&nbsp;點(diǎn)贊({{ article_obj.up_num }})&nbsp;</span></div></li><hr>{% endfor %}</ul></div><div class="col-md-2 col-xs-2"><div class="panel panel-warning"><div class="panel-heading"><h3 class="panel-title">廣告1</h3></div><div class="panel-body">內(nèi)容1</div></div><div class="panel panel-danger"><div class="panel-heading"><h3 class="panel-title">廣告2</h3></div><div class="panel-body">內(nèi)容2</div></div><div class="panel panel-info"><div class="panel-heading"><h3 class="panel-title">廣告3</h3></div><div class="panel-body">內(nèi)容3</div></div></div> </div>

    9、圖片防盜鏈

    如何避免別的網(wǎng)站直接通過(guò)本網(wǎng)站的url訪問(wèn)本網(wǎng)站資源:
    簡(jiǎn)單的防盜:可以做到請(qǐng)求來(lái)的時(shí)候先看看當(dāng)前請(qǐng)求是從哪個(gè)網(wǎng)站過(guò)來(lái)的,如果是本網(wǎng)站那么可以正常訪問(wèn),如果是其它網(wǎng)站則直接拒絕。
    請(qǐng)求頭里有一個(gè)專門記錄請(qǐng)求來(lái)自于哪個(gè)網(wǎng)址的參數(shù):Referer: http://127.0.0.1:8000/asfdasf/

    繞過(guò)別人的防盜方式:
    1、修改請(qǐng)求頭Referer
    2、寫爬蟲將對(duì)方網(wǎng)址的所有資源直接下載到我們自己的服務(wù)器上

    10、個(gè)人站點(diǎn)頁(yè)面搭建

    ps:由于url方法第一個(gè)參數(shù)是正則表達(dá)式,所以當(dāng)路由特別多的時(shí)候,可能會(huì)出現(xiàn)被頂替的情況,針對(duì)這種情況有兩種解決方式:
    1、修改正則表達(dá)式
    2、調(diào)整url方法的位置

    添加個(gè)人站點(diǎn)的路由:url(r'^(?P<username>w+)/$',views.site,name='site')

    增加視圖函數(shù):

    def site(request,username):# 先校驗(yàn)當(dāng)前用戶名對(duì)應(yīng)的個(gè)人站點(diǎn)是否存在user_obj = models.UserInfo.objects.filter(username=username).first()# 如果站點(diǎn)不存在則返回404頁(yè)面if not user_obj:return render(request,'errors.html')blog = user_obj.blog# 查詢當(dāng)前個(gè)人站點(diǎn)下的所有文章article_list = models.Article.objects.filter(blog = blog)return render(request,'site.html',locals())

    個(gè)人站點(diǎn)頁(yè)面site.html

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title><script src="jQuery.js"></script><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script><link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet"><script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script></head> <body> {# 這里要加上導(dǎo)航條的代碼 #} <div class="container-fluid"><div class="row"><div class="col-md-3 col-xs-3"><div class="panel panel-warning"><div class="panel-heading"><h3 class="panel-title">廣告1</h3></div><div class="panel-body">內(nèi)容1</div></div><div class="panel panel-danger"><div class="panel-heading"><h3 class="panel-title">廣告2</h3></div><div class="panel-body">內(nèi)容2</div></div><div class="panel panel-info"><div class="panel-heading"><h3 class="panel-title">廣告3</h3></div><div class="panel-body">內(nèi)容3</div></div></div><div class="col-md-9 col-xs-9"><ul class="media-list">{% for article_obj in article_list %}<li class="media"><h4 class="media-heading"><a href="">{{ article_obj.title }}</a></h4><div class="media-left"><a href="#">{# 圖片的路徑需要我們手動(dòng)加上media前綴#}<img class="media-object" src="/media/{{ article_obj.blog.userinfo.avatar }}" alt="..."width="60"height="60"></a></div><div class="media-body">{{ article_obj.desc }}</div><div class="pull-right"><span>posted&nbsp;&nbsp;</span><span>@&nbsp;&nbsp;</span><span>{{ article_obj.create_time|date:"Y-m-d" }}&nbsp;&nbsp;</span><span>{{ article_obj.blog.userinfo.username }}&nbsp;&nbsp;</span><span><span class="glyphicon glyphicon-comment"></span>評(píng)論({{ article_obj.comment_num }})&nbsp;&nbsp;</span><span><span class="glyphicon glyphicon-thumbs-up"></span>點(diǎn)贊({{ article_obj.up_num }})&nbsp;&nbsp;</span><span><a href="">編輯</a></span></div></li><hr>{% endfor %}</ul></div></div> </div></body> </html>

    總結(jié)

    以上是生活随笔為你收集整理的tornado项目搭建_Day71-73 BBS项目(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

    中文av在线播放 | 国产黄大片 | 日本精品视频在线观看 | 日韩中文字幕91 | 安徽妇搡bbbb搡bbbb | 久久精品久久久精品美女 | 国产日韩欧美精品在线观看 | 国产伦精品一区二区三区高清 | 色婷婷一区 | 在线观看视频在线观看 | 日韩精品五月天 | 日韩国产精品久久 | av电影在线播放 | 中文字幕免费观看全部电影 | 99一级片| 日本色小说视频 | 久草免费在线视频 | 91在线免费播放视频 | www.久久色| 国产高清视频在线观看 | 国产精品久久一卡二卡 | 欧美日韩不卡在线 | 一级片视频在线 | 韩国一区二区三区视频 | 一区二区视频在线看 | 日韩精品亚洲专区在线观看 | 超碰伊人网 | 久久久久久久久久久久影院 | www.久久成人 | 香蕉国产91 | 国产成人综 | 五月婷婷在线观看视频 | av三级av| 在线免费观看国产视频 | 国产97在线看| 久久久久久久久国产 | 9797在线看片亚洲精品 | 国产综合精品一区二区三区 | 精品久久毛片 | 欧美人体xx | 蜜桃av观看 | 日韩av资源站 | 91在线91| 91亚洲精品在线观看 | 不卡的av中文字幕 | 97人人超碰在线 | 一级α片免费看 | av在线看片 | 国产精成人品免费观看 | 六月丁香婷婷久久 | 日韩av偷拍 | 久久久免费观看 | 久久美女电影 | 黄色大片国产 | 色婷婷激情 | 91亚瑟视频 | 亚洲六月丁香色婷婷综合久久 | 丝袜一区在线 | 午夜精品电影一区二区在线 | 精品视频免费观看 | 九九热免费观看 | 亚洲精品视频在线播放 | 91一区啪爱嗯打偷拍欧美 | 中文字幕成人 | 国产精品资源在线观看 | 国产在线观看国语版免费 | 激情五月婷婷激情 | 亚洲国产精品成人av | 伊人色**天天综合婷婷 | 五月天婷亚洲天综合网鲁鲁鲁 | 久草在线手机视频 | 黄色av电影 | 国产明星视频三级a三级点| 欧美激情综合色综合啪啪五月 | 99热精品在线观看 | 天堂久色| 日韩电影久久 | 亚洲三级在线免费观看 | 99热99| 青青河边草免费视频 | 一色屋精品视频在线观看 | 久久久亚洲网站 | 337p西西人体大胆瓣开下部 | 亚洲美女免费视频 | 99爱视频在线观看 | 国产精品综合久久久久 | 91色国产在线 | 九九免费观看视频 | 亚洲免费专区 | 天天色婷婷 | 黄网站色欧美视频 | 超碰在线94 | 在线观看国产亚洲 | 97国产大学生情侣酒店的特点 | 99精品免费在线观看 | 99re8这里有精品热视频免费 | 丰满少妇在线观看资源站 | 国产亚洲情侣一区二区无 | 黄色片软件网站 | 久久福利综合 | 国产精品九九九九九 | 欧美在线视频a | 天天操天天射天天操 | 最新色站| 国产最顶级的黄色片在线免费观看 | 久久精精品视频 | 精品久久久久久久久久久久久 | 久久午夜羞羞影院 | 日韩黄色在线观看 | 亚洲国产成人在线观看 | 国产精品99久久久久久久久 | 成人在线视频你懂的 | 午夜影视av | 999男人的天堂 | 天天操人人干 | 欧美在线视频一区二区 | 亚洲欧美精品在线 | 色婷婷综合久久久 | 国产免费资源 | 亚洲激情视频在线 | 日韩欧美一区二区三区在线观看 | 毛片基地黄久久久久久天堂 | 韩日电影在线 | 天天色天天色天天色 | 中国老女人日b | 99视频在线精品 | 亚洲国产精品小视频 | av无限看 | 一区二区三区免费在线观看视频 | 亚洲综合国产精品 | 亚洲成人国产精品 | 香蕉视频最新网址 | 西西4444www大胆艺术 | 丝袜少妇在线 | 亚洲网站在线看 | 国际精品久久久久 | 六月丁香激情综合 | 中文字幕资源在线观看 | 日韩免费av在线 | 麻豆精品91 | 国产aa免费视频 | 日韩高清观看 | 黄色视屏在线免费观看 | 国产婷婷一区二区 | 亚洲精品中文在线 | 水蜜桃亚洲一二三四在线 | 黄色看片 | 97超碰网 | 在线成人免费 | 激情综合网在线观看 | 日韩高清在线观看 | 天天操天天干天天 | 日韩在线观看视频一区二区三区 | 欧美精品v国产精品v日韩精品 | 97超碰中文字幕 | 激情导航 | 日韩在线中文字幕视频 | 嫩草伊人久久精品少妇av | 国产福利在线免费观看 | 亚洲成色| 91爱爱免费观看 | 国产精品青草综合久久久久99 | 天堂网一区| 夜色.com| 欧美精品免费在线 | 99r国产精品| 天天爱天天操天天射 | 亚洲五月花 | 国产日韩在线观看一区 | 国产精品毛片一区二区在线看 | 奇米影音四色 | 色婷婷狠 | 日本深夜福利视频 | 日韩精品不卡 | 国产免费又爽又刺激在线观看 | 婷婷亚洲综合 | 亚洲香蕉视频 | 国语麻豆| 9ⅰ精品久久久久久久久中文字幕 | 久草久草在线 | 人人舔人人 | 免费视频色| 日韩欧美专区 | 欧美日韩精品在线播放 | 九九久久成人 | 天天天干天天射天天天操 | 99电影| 夜夜爽88888免费视频4848 | 国产亚洲一区二区三区 | 色婷婷播放 | 欧美性久久久久久 | 国产精品视频在线看 | www久久久| 黄色一级在线观看 | 91夫妻视频| 精品久久久免费视频 | 国产高清视频免费在线观看 | 视频在线观看亚洲 | 国产精品v欧美精品v日韩 | 久久免费黄色网址 | 伊色综合久久之综合久久 | 天天干天天操av | 黄色一区三区 | 国产精品一码二码三码在线 | 嫩草av在线| 成人禁用看黄a在线 | 99视频在线免费 | av一区二区三区在线播放 | 99视频在线免费观看 | 精品一区在线 | 97在线观看免费高清完整版在线观看 | 97超级碰 | 亚洲精品黄网站 | 亚洲一二区视频 | 久久国产美女视频 | 亚洲日本韩国一区二区 | 日韩欧美国产精品 | 日韩理论影院 | a在线免费| 免费在线视频一区二区 | 欧美a视频在线观看 | 成人91在线 | 999抗病毒口服液 | 久久视频一区二区 | 免费一区在线 | 一级黄色片在线免费观看 | 国产精品一区二区av影院萌芽 | 国产精品中文在线 | 免费在线观看av网址 | 亚洲第一成网站 | 麻豆视频在线看 | 国产理论一区二区三区 | 一区二精品 | 91看片网址 | 欧美韩国日本在线 | 亚洲高清视频在线观看免费 | 日韩av片在线 | 国产精品久久视频 | 91精品国产91久久久久福利 | 精品视频99 | 久久亚洲影视 | 一区二区三区免费 | 色国产精品 | 黄色www免费 | 午夜精品久久久久久99热明星 | 国产一区在线免费观看 | 在线中文字幕播放 | 91在线区 | 日韩一二三 | 国产在线色 | 日韩videos| 中文字幕中文字幕在线一区 | aa级黄色大片 | 亚洲一区欧美精品 | 91大神精品视频在线观看 | 精品在线免费观看 | 亚洲日本成人网 | 91中文字幕 | 欧洲亚洲激情 | 天天骚夜夜操 | 国产精品国产亚洲精品看不卡15 | 伊人久久精品久久亚洲一区 | 成人午夜电影免费在线观看 | 久久99亚洲精品久久 | 久久国产免费看 | 欧美电影黄色 | 久久在现视频 | 色五丁香 | 免费能看的av | 天天干,天天射,天天操,天天摸 | 99国产高清 | 91九色视频在线 | 国产韩国日本高清视频 | 日日弄天天弄美女bbbb | www.com在线观看 | 欧美日韩亚洲第一 | 国产成人精品一区二区三区福利 | www黄com | 亚洲视屏在线播放 | 国产999精品视频 | 欧美性生爱 | 欧美一二区视频 | 亚洲激情 欧美激情 | 色综合天天| 99re亚洲国产精品 | 92国产精品久久久久首页 | 国产区 在线 | 丁香久久 | 国产在线欧美在线 | 久久婷婷国产色一区二区三区 | 亚洲精品午夜国产va久久成人 | 少妇激情久久 | 国产精品无av码在线观看 | 精品国产成人av | 开心色停停| 欧美日韩精品在线观看 | 婷婷.com| 色福利网站 | 视频一区二区在线观看 | 国产在线视频在线观看 | 色视频在线观看免费 | 天天爽天天碰狠狠添 | 久草免费福利在线观看 | 2022中文字幕在线观看 | 又黄又爽又色无遮挡免费 | 天天操天天射天天舔 | 久久国产福利 | 国产黄在线看 | 日韩精品久久久久久 | www久久九| 中文字幕二区在线观看 | 中文字幕日韩伦理 | av资源免费观看 | 成人性生活大片 | 日韩资源在线播放 | 久草在线观看资源 | 久久视频国产 | 免费观看国产成人 | 精品一区二区三区久久 | 一级黄色片在线 | 亚洲国产欧美在线看片xxoo | 久久蜜臀一区二区三区av | 欧美日韩一区二区免费在线观看 | 日韩在线视频精品 | 激情网婷婷 | 中文字幕在线观看视频网站 | 日本不卡视频 | 中文字幕一区在线观看视频 | japanesexxx乱女另类 | 欧美91精品国产自产 | 国产在线播放不卡 | 免费视频a | 亚洲人在线7777777精品 | 2024国产精品视频 | 国产三级精品在线 | 久久久av电影 | 中文字幕 婷婷 | 在线成人免费 | 丝袜少妇在线 | 国产精品 中文在线 | 国产精品资源 | 国产无套一区二区三区久久 | 香蕉日日 | 99r在线 | 69性欧美 | 久久久精品欧美 | 国产亚洲综合性久久久影院 | 国产在线观看免费观看 | 天天射天天操天天 | 国产成人亚洲在线观看 | 国产精品一二三 | 国产视频一区二区在线 | 麻豆免费精品视频 | 中文字幕在线观看播放 | 亚洲理论片在线观看 | 国产91学生粉嫩喷水 | 久久99国产精品久久 | 久综合网| 亚洲理论在线观看电影 | 国产精成人品免费观看 | 99久久精品免费 | 麻豆精品在线视频 | 在线观看国产中文字幕 | 久久不卡国产精品一区二区 | 久久影院午夜论 | 成人啪啪18免费游戏链接 | 美女一二三区 | 伊人天堂网 | 欧美大香线蕉线伊人久久 | 精品久久久久久国产偷窥 | 在线欧美最极品的av | 欧美一区日韩一区 | 成 人 黄 色 视频免费播放 | 国产麻豆视频免费观看 | 黄色亚洲 | 久99精品| 久久久久久久久精 | 免费成人在线观看视频 | 国产 日韩 在线 亚洲 字幕 中文 | 最近中文国产在线视频 | 精品毛片一区二区免费看 | 亚洲精品在线看 | 欧洲视频一区 | 麻豆国产露脸在线观看 | 国产手机精品视频 | 亚洲清纯国产 | 欧美永久视频 | 久久女同性恋中文字幕 | www.av在线.com | 99视频精品免费观看, | 91精品久久久久久久99蜜桃 | www日韩视频 | 亚洲 精品在线视频 | 久久夜av | 久热av | 亚洲伦理中文字幕 | 涩五月婷婷| 国产一区二区三区久久久 | 久草在线精品观看 | 99精品国产免费久久 | 久久久久久久久久久久久久免费看 | 国产网红在线观看 | 国产一区私人高清影院 | 久久艹综合 | 免费国产黄线在线观看视频 | 亚洲国产97在线精品一区 | 麻豆播放| 精品久久久久久亚洲综合网站 | ww亚洲ww亚在线观看 | 日韩免费电影一区二区 | 日韩毛片在线一区二区毛片 | 干亚洲少妇 | 欧美日韩国产页 | 最近最新中文字幕 | 天天操天天操天天操天天操 | 婷婷五月在线视频 | 国产精品一二 | 欧美片一区二区三区 | 中文字幕日韩无 | 天天操·夜夜操 | 色婷婷综合久色 | 日韩免费看| 亚洲综合在线五月 | 亚洲成aⅴ人片久久青草影院 | 午夜在线观看影院 | 国产亚洲成人网 | 日韩欧美视频免费观看 | 久久久午夜视频 | 久久视频中文字幕 | 涩涩成人在线 | 中文在线www | 一级淫片a| 毛片美女网站 | 最近中文字幕 | 操高跟美女 | 国产原创在线 | 欧美精品在线一区 | 久久国产成人午夜av影院潦草 | 国产精品久久久久永久免费观看 | 五月天激情视频在线观看 | 精品在线观看免费 | 午夜视频在线观看一区二区三区 | 久久国产视频网站 | 午夜国产福利在线观看 | 香蕉97视频观看在线观看 | 91九色视频在线观看 | 91av在线播放视频 | 欧美人人| 国产精品丝袜久久久久久久不卡 | 天天操天天射天天操 | 国产精品免费观看国产网曝瓜 | 色香天天 | 久久特级毛片 | 黄色毛片视频免费观看中文 | 国产免费av一区二区三区 | 免费日韩视| 欧美色综合久久 | 在线观看视频你懂得 | 天天操天天干天天操天天干 | 久久影视网 | 欧美一区影院 | 九九日韩 | 国产一级淫片免费看 | 国产在线第三页 | 黄色小网站在线观看 | 91免费黄视频 | 久久精品99国产精品日本 | 日韩超碰在线 | www.国产毛片| 色天天 | 国产亚洲视频在线观看 | 久久免费成人精品视频 | 日韩国产精品久久久久久亚洲 | 国产精品一区二区在线观看 | 久久综合久久综合这里只有精品 | 一区二区三区在线观看免费视频 | 欧美国产大片 | 又长又大又黑又粗欧美 | 免费观看日韩av | 亚洲天堂免费视频 | 婷婷丁香六月 | 国产资源网 | 日本精品中文字幕 | 久久国产精彩视频 | 人人草网站 | 天天操人 | 日韩一区二区三区高清在线观看 | 黄色的片子 | 99精品视频在线观看视频 | 免费黄色小网站 | 日韩精品最新在线观看 | 99精品乱码国产在线观看 | 九九九九免费视频 | 亚洲综合在线观看视频 | 成人作爱视频 | 九九视频在线观看视频6 | 久久精品aaa | 91香蕉视频| 香蕉视频网址 | 久久国产精品99久久久久久丝袜 | 久草精品在线观看 | 久久久久久久18 | 久久久久久久影视 | 国产成人在线免费观看 | 久久草草热国产精品直播 | 精品久久久久久久久亚洲 | 亚洲乱码在线观看 | 亚洲精品小视频在线观看 | 毛片播放网站 | 亚洲精选视频免费看 | 五月天激情开心 | 久久久久国产精品免费 | 国产精品伦一区二区三区视频 | 最近在线中文字幕 | 色狠狠综合 | 综合色在线| 99久久精品国产欧美主题曲 | 中文字幕在线观看视频一区 | 色综合亚洲精品激情狠狠 | 国产在线播放一区 | 免费福利在线 | 亚洲人片在线观看 | 日韩婷婷 | 亚洲成av人影院 | 91精品国产一区二区在线观看 | 欧美日韩一区二区视频在线观看 | 丁香六月激情 | 欧美一区二区免费在线观看 | 国产中文字幕一区二区三区 | 欧美视频99 | 91av蜜桃| 美女久久久 | 97色噜噜 | 国产美女视频网站 | 人人澡人人爽欧一区 | 国产在线观看高清视频 | 成年美女黄网站色大片免费看 | 亚洲黄色免费 | 三级视频片 | 日韩网站免费观看 | av片一区| 欧美激情xxxx性bbbb | 亚洲蜜桃在线 | 97伊人网 | 91传媒免费在线观看 | 亚洲精品播放 | 97在线免费视频观看 | 精品久久影院 | 美女视频免费精品 | 国产精品久久久久久久久久久免费 | 中文一区二区三区在线观看 | 国产视频一区在线免费观看 | 免费看片成人 | 国产精品视频免费 | av在线播放网址 | 人人澡澡人人 | 免费av网站观看 | 91精品视频导航 | 久久手机免费视频 | 欧美成年人在线视频 | 国产区精品视频 | 日本久久电影网 | 亚洲黄色片在线 | 成人av影院在线观看 | 国产精品国产亚洲精品看不卡15 | av电影在线免费观看 | 91视频久久久 | 国产成人一区二区在线观看 | av中文电影 | 视频国产区 | 婷婷亚洲综合五月天小说 | 国产麻豆剧果冻传媒视频播放量 | 久久一区二区三区日韩 | 超碰激情在线 | 国产亚洲婷婷免费 | 国产精品99久久久久久小说 | 又大又硬又黄又爽视频在线观看 | 少妇搡bbbb搡bbb搡aa | 久草在线视频免费资源观看 | 在线免费精品视频 | 四虎成人网 | 狠狠狠综合 | 成人网看片| 亚洲成人资源网 | 2019天天干天天色 | 91看片淫黄大片在线播放 | 四虎影视8848aamm| 精品在线观看视频 | 色噜噜狠狠狠狠色综合 | 人人网人人爽 | 黄色一级免费电影 | 色在线国产 | 麻豆一二三精选视频 | 日日噜噜噜噜夜夜爽亚洲精品 | 99久久综合国产精品二区 | 91在线播放视频 | 99精彩视频 | 久草国产精品 | 日韩精品久久久久久中文字幕8 | 国产亚洲综合在线 | 久草在线视频网站 | www五月天com | 中文字幕影片免费在线观看 | 成人av.com | 成人电影毛片 | 久久精品视频中文字幕 | 亚洲欧美激情精品一区二区 | 亚洲精品美女 | 色综合久久天天 | 探花视频在线观看 | 尤物97国产精品久久精品国产 | 国产99久| 91精品久久久久久综合五月天 | 欧美日韩一区二区免费在线观看 | 黄色大片中国 | 免费观看视频黄 | 欧美精品被 | 欧美xxxxx在线视频 | 91久久精品一区二区三区 | 免费在线观看日韩视频 | 狠狠色丁香久久婷婷综合五月 | 久久国产精品免费一区 | 91av视频在线观看免费 | 欧美在线18| 伊人天天综合 | 国产中文字幕在线播放 | 天天看天天干 | 日韩av成人免费看 | 视频成人 | 狠狠五月婷婷 | 日韩精品久久一区二区 | 草久在线视频 | 五月激情站 | 欧美另类交人妖 | 亚洲国产中文字幕在线观看 | 91激情视频在线观看 | 国产1区2 | 欧美日韩国产精品一区 | 国产不卡免费av | 这里只有精品视频在线观看 | 天天做天天爽 | 国产精品99久久久久久小说 | 亚洲第一区精品 | 午夜精品久久久99热福利 | 国产精品嫩草在线 | www.91av在线| 四虎伊人 | 天天干天天射天天插 | 欧洲亚洲国产视频 | 香蕉网站在线观看 | 国产a国产a国产a | 国产精品手机播放 | 中文在线最新版天堂 | 精品国自产在线观看 | 日本最新高清不卡中文字幕 | 又黄又爽又刺激视频 | 日本久久综合网 | 久久精品亚洲一区二区三区观看模式 | 麻豆94tv免费版 | 91视频网址入口 | 久久高清免费观看 | 天天干天天综合 | a视频在线 | 亚洲欧洲成人精品av97 | 中文字幕精品一区二区精品 | 成人a级网站| 日韩欧美一区二区在线播放 | 日本系列中文字幕 | 韩国av在线播放 | 狠狠色狠狠综合久久 | 色婷婷色| 日韩在线不卡 | 精品免费视频. | 日日夜夜91 | 午夜色影院| 天天干天天干天天色 | 国产精品中文 | 日韩精品中文字幕久久臀 | 91精品视频在线免费观看 | 精品专区一区二区 | 成年人黄色免费看 | 亚洲手机av| 日韩av在线一区二区 | 91精品婷婷国产综合久久蝌蚪 | 欧美国产日韩一区二区三区 | 亚洲精品视频中文字幕 | 中文成人字幕 | 91人人射 | 亚洲三级av | 国产99精品在线观看 | 天天干天天想 | 在线播放亚洲 | 色鬼综合网 | 国产a免费 | 欧美黑吊大战白妞欧美 | 人人干在线 | 国产精品18p | 国产一区二区三区四区大秀 | 一区二区伦理电影 | 国产一区二区三区网站 | 日韩精品一区二区三区视频播放 | 91cn国产在线 | 婷婷色网址 | 国产又粗又硬又爽的视频 | 亚洲免费国产视频 | 黄色毛片网站在线观看 | 国产高清av免费在线观看 | 狠狠躁日日躁狂躁夜夜躁av | 中文字幕免费国产精品 | 免费在线色电影 | 激情视频在线高清看 | 免费在线观看91 | 国产日韩在线视频 | 69国产精品视频 | 丝袜网站在线观看 | 2000xxx影视 | 日韩免费久久 | 久久免费毛片视频 | 中文字幕国语官网在线视频 | 99精品区| av激情五月 | 三级视频国产 | 日韩v欧美v日本v亚洲v国产v | 国产123av | 91麻豆精品国产自产在线游戏 | 天天曰 | 在线国产91| 国产视频资源在线观看 | 成人av资源网 | 在线免费试看 | 国产又粗又长的视频 | 久草在线视频看看 | 天天在线免费视频 | 国产精久久久久久久 | 91免费国产在线观看 | 欧美日韩高清一区二区 | 欧美久久久久久久久久 | 久久艹久久 | 久久综合综合久久综合 | 中文字幕av免费 | 国产成人久久精品 | 久免费视频 | 欧美色图88 | 91精品久久久久久久久久入口 | 亚洲精选视频在线 | 久久久影院一区二区三区 | 日韩在线免费高清视频 | 99免费| 96国产精品视频 | 综合网色 | www久久com| 国产一级特黄毛片在线毛片 | 在线观看久草 | 99久久超碰中文字幕伊人 | 男女全黄一级一级高潮免费看 | 国产欧美综合视频 | 午夜精品视频免费在线观看 | 亚洲黄色av一区 | 久草精品视频在线看网站免费 | 国产一区福利在线 | 久久99这里只有精品 | 亚洲男男gaygayxxxgv | 精品一区二区免费在线观看 | 日韩色爱 | 亚洲免费精品一区二区 | 成人免费xxxxxx视频 | 国产精品久久久久久一二三四五 | 五月宗合网 | 成人av网站在线观看 | 午夜精品一二区 | 婷婷综合视频 | 综合国产视频 | 亚洲精品高清在线 | 天天干天天射天天操 | 欧美色图狠狠干 | 91日韩在线视频 | 色视频在线 | 人人涩 | a级一a一级在线观看 | 久久91网 | 少妇精品久久久一区二区免费 | 欧美一进一出抽搐大尺度视频 | 少妇bbb搡bbbb搡bbbb | 日韩精品免费在线视频 | 欧美精品三级在线观看 | 日韩v欧美v日本v亚洲v国产v | 美女国产 | 久久视精品| 免费韩国av | 久久综合操 | 日韩视频一区二区在线观看 | 久久xxxx| 丁香婷婷久久久综合精品国产 | 日韩精品aaa | 一本一本久久aa综合精品 | 免费日韩一区二区三区 | 色多多在线观看 | 久久久午夜精品福利内容 | 亚洲免费成人 | 欧美色图狠狠干 | 91精品一区二区三区蜜臀 | 97视频在线免费 | 69亚洲视频| 欧美在线不卡一区 | 91正在播放 | 99九九99九九九视频精品 | 中文在线中文资源 | 亚洲少妇xxxx | 一区二区三区在线免费观看视频 | 99视频在线观看一区三区 | 91经典在线 | 久久久久亚洲精品中文字幕 | 国产精品久久久久久久av电影 | 手机av电影在线 | 久久久久区 | 欧美三人交| 亚洲最大av | 日本黄色免费电影网站 | 伊人六月| 亚洲精品国偷拍自产在线观看 | 亚洲精品国产成人 | 玖玖在线视频观看 | 免费观看91视频 | 日本中文字幕影院 | 麻豆视频在线免费 | av电影中文字幕 | 天天操天天草 | 国产精品国产三级国产专区53 | 在线播放91 | 国产精品免费在线播放 | www99精品| 久久免费看a级毛毛片 | 色综合天天 | 一本—道久久a久久精品蜜桃 | 黄色软件网站在线观看 | 天天干天天操天天拍 | 中文字幕二区在线观看 | 亚洲一二三在线 | 久久香蕉电影网 | 免费日韩一区二区三区 | 中文字幕亚洲高清 | 中文字幕免费久久 | 91喷水| 国产成人av网 | 色综合天天视频在线观看 | 毛片视频网址 | 99在线免费视频观看 | 伊人天堂久久 | 麻豆91在线播放 | 麻豆国产精品永久免费视频 | av网站手机在线观看 | 国产免费观看高清完整版 | 国产一级片观看 | 日韩欧美在线观看一区二区三区 | 中文字幕久久精品亚洲乱码 | 精品视频专区 | 天天插天天爱 | 久草在线国产 | 欧美日韩精品在线一区二区 | 91中文字幕在线 | 国语精品视频 | 久久久久久99精品 | 国产成人在线免费观看 | 久久久久国产精品免费免费搜索 | 久久久精品国产免费观看同学 | 亚洲另类视频 | 久久99久久99精品免视看婷婷 | 日韩欧美国产激情在线播放 | 日韩精品免费一区二区 | 免费网址在线播放 | 国产精品第52页 | 久久人人爽人人人人片 | 中文字幕在线播出 | 欧美日韩精品影院 | 四虎在线观看视频 | 天天夜操| 国产日韩欧美视频在线观看 | 99视频导航 | 精品美女久久久久久免费 | 久久99精品国产一区二区三区 | 91插插插免费视频 | 免费看黄网站在线 | 999毛片| 中文字幕一区二区三区在线视频 | 亚洲精品网站在线 | 国产女人18毛片水真多18精品 | 国产精品成人一区 | 日本丶国产丶欧美色综合 | 超碰97成人| 香蕉网在线 | 免费网站黄 | 久久五月婷婷丁香社区 | 国产69久久 | 欧美日韩精品网站 | 美女视频久久黄 | 国产在线a不卡 | 99精品在线直播 | 精品久久久久久综合 | 国产69精品久久99的直播节目 | 国产五十路毛片 | 岛国av在线 | 黄色a一级片 | 日本中文字幕在线一区 | 亚洲精品视频大全 | 久久论理 | 97国产大学生情侣酒店的特点 | 在线视频 你懂得 | www.久草.com | 91成人欧美 | 98久久| 国产成人精品一区二区三区福利 | 久要激情网 | 国产夫妻自拍av | 7777精品伊人久久久大香线蕉 | 久久图 | 中文字幕高清av | 亚洲欧美视屏 | 久久av黄色 | 久久综合久久88 | 国产韩国日本高清视频 | 中文字幕视频一区二区 | 国内丰满少妇猛烈精品播 | 日日爱视频 | 久久免费视频在线观看 | 成人网在线免费视频 | 在线v片 | 成人电影毛片 | 国产破处精品 | 91香蕉视频在线 | www.黄色| 日本久久综合网 | 黄色成人av | 成片免费观看视频 | 蜜臀av在线一区二区三区 | 成人免费观看电影 | 蜜臀久久99精品久久久无需会员 | 久久999精品| 精品一区二区在线观看 | av丝袜美腿 | 日韩美女黄色片 | 中文字幕区 | 亚洲天天 | 日韩av网站在线播放 | 国产欧美精品在线观看 | 久久夜视频| 99视频精品免费视频 | 91手机电视 | 91福利影院在线观看 | 欧美性网站 | 亚洲精品永久免费视频 | 久久久久久黄色 | 亚州日韩中文字幕 | 精品国产免费人成在线观看 | 色偷偷av男人天堂 | 久久久久中文 | 在线观看中文字幕2021 | 成人国产精品久久久 | 婷婷六月综合亚洲 | 不卡国产在线 | 国产精品女人网站 | 久久久久久久久久国产精品 | a电影免费看| 亚洲在线色 | 国产精品av免费 | 丁香花在线视频观看免费 | 国产精品嫩草影视久久久 | 99热亚洲精品 | 五月婷婷狠狠 | 日韩中文在线字幕 | 欧美日韩一区二区三区免费视频 | 午夜精品久久久久久久99热影院 | 深爱开心激情 | 日韩免费视频一区二区 | 97色在线观看 | 草久久久久 | 午夜色影院 | 亚洲天天在线日亚洲洲精 | 亚洲精品在线播放视频 | 亚洲激情在线观看 | 久久综合九色99 | 国产一区二区三区免费视频 | 精品国产一区二区三区久久久蜜月 | 成人av免费看 | 国产又粗又猛又黄视频 | 精品一二三四五区 | 国产剧在线观看片 | 91麻豆精品国产自产 | 麻豆一区二区 | 国产高清视频在线免费观看 | 国产专区一| 国产成人综合在线观看 | 欧美成人日韩 | 国产精品久久久久久久久久尿 | www.成人久久 | 国产又粗又猛又爽又黄的视频先 | 99一级片 | wwwwww黄| 激情婷婷在线观看 |