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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python 21 Django 实用小案例1

發布時間:2023/12/13 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 21 Django 实用小案例1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實用案例

? ? ?驗證碼與驗證

?  KindEditor

? ? ?組合搜索的實現

?  單例模式

? ? ?beautifulsoup4

? ? ?

驗證碼與驗證

需要安裝Pillow模塊

pip stall pillow

1、首先需要借助pillow模塊用來畫一個驗證碼圖形,這里單獨封裝了一個py文件,調用一個方法就好了

1 #!/user/bin/env python 2 # -*-coding: utf-8-*- 3 import random 4 from PIL import ImageDraw,ImageFont,Image,ImageFilter 5 6 7 def random_check_code(width=120, height=30, char_length=5, font_file='wryh.ttf', font_size=28): 8 code = [] 9 img = Image.new(mode='RGB', size=(width, height), color=(255, 255, 255)) 10 draw = ImageDraw.Draw(img, mode='RGB') 11 12 def rndChar(): 13 """ 14 生成隨機字母 15 :return: 16 """ 17 return chr(random.randint(65, 90)) 18 19 def rndColor(): 20 """ 21 生成隨機顏色 22 :return: 23 """ 24 return (random.randint(0, 255), random.randint(10, 255), random.randint(64, 255)) 25 26 # 寫文字 27 font = ImageFont.truetype(font_file, font_size) 28 for i in range(char_length): 29 char = rndChar() 30 code.append(char) 31 h = random.randint(0, 4) 32 draw.text([i * width / char_length, h], char, font=font, fill=rndColor()) 33 34 # 寫干擾點 35 for i in range(40): 36 draw.point([random.randint(0, width), random.randint(0, height)], fill=rndColor()) 37 38 # 寫干擾圓圈 39 for i in range(40): 40 draw.point([random.randint(0, width), random.randint(0, height)], fill=rndColor()) 41 x = random.randint(0, width) 42 y = random.randint(0, height) 43 draw.arc((x, y, x + 4, y + 4), 0, 90, fill=rndColor()) 44 45 # 畫干擾線 46 for i in range(5): 47 x1 = random.randint(0, width) 48 y1 = random.randint(0, height) 49 x2 = random.randint(0, width) 50 y2 = random.randint(0, height) 51 draw.line((x1, y1, x2, y2), fill=rndColor()) 52 53 img = img.filter(ImageFilter.EDGE_ENHANCE_MORE) #加濾鏡,可以增加顏色的不同 54 return img, ''.join(code) 生成隨機驗證碼

函數的參數都已在調用的時候修改。

2、登陸界面設計

假設驗證碼跟登錄頁面在同一函數一起生成,那么每次刷新驗證碼都需要整個頁面一起重新加載;顯然,這是不合理的。所以可以確定驗證碼跟登錄界面是2個視圖函數控制的。

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body style="margin: 0 auto;"> 8 <div id="main"> 9 <form method="post" action="/login/"> 10 {% csrf_token %} 11 <p><label>用戶名:</label><input type="text" name="user" /></p> 12 <p><label>密碼:</label><input type="password" name="pwd" /></p> 13 <p><label>驗證碼:</label><input type="text" name="checkcode" /><img src="/check_code.html" /></p> 14 <p><input type="submit" /></p> 15 </form> 16 </div> 17 </body> 18 </html> login html 1 def login(request): 2 if request.method == 'GET': 3 return render(request, 'login.html') login 視圖函數

3、驗證碼

將驗證碼圖片對象返回到模板

1 def check_code(request): 2 stream = BytesIO() # 申請一段內存 3 img, code = random_check_code() # 獲取隨機碼跟隨機碼圖片對象 4 img.save(stream, 'PNG') # 將隨機碼對象保存到內存對象中 5 request.session['CheckCode'] = code # 將隨機字符串保存到session 6 return HttpResponse(stream.getvalue()) # 返回內存中的隨機碼圖片對象 View Code

4、如何刷新驗證碼呢

直接將原路由系統通過點擊事件賦值給src,瀏覽器默認是不會進行刷新的;所以這里有一個小技巧,我們可以獲取src的值,在末尾加上一個?,這樣就可以實現點擊刷新了。

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body style="margin: 0 auto;"> 8 <div id="main"> 9 <form method="post" action="/login/"> 10 {% csrf_token %} 11 <p><label>用戶名:</label><input type="text" name="user" /></p> 12 <p><label>密碼:</label><input type="password" name="pwd" /></p> 13 <p><label>驗證碼:</label><input type="text" name="checkcode" /><img src="/check_code.html" οnclick="ImgChange(this);"/></p> 14 <p><input type="submit" /></p> 15 </form> 16 </div> 17 </body> 18 <script> 19 function ImgChange(ths) { 20 ths.src = ths.src + '?' 21 } 22 </script> 23 </html> 修改過的login html

開啟驗證碼驗證功能

1 def login(request): 2 if request.method == 'GET': 3 return render(request, 'login.html') 4 elif request.method == 'POST': 5 checkcode = request.POST.get('checkcode') 6 code_session = request.session['CheckCode'] 7 print(checkcode) 8 print(code_session) 9 if checkcode.upper() == request.session['CheckCode'].upper(): 10 return HttpResponse('驗證成功') 11 else: 12 return render(request, 'login.html') 修改后的login 視圖函數

?

?

KindEditor

1、官網下載

http://kindeditor.net/demo.php

2、文件夾解壓文件說明

├── asp asp示例 ├── asp.net asp.net示例 ├── attached 空文件夾,放置關聯文件attached ├── examples HTML示例 ├── jsp java示例 ├── kindeditor-all-min.js 全部JS(壓縮) ├── kindeditor-all.js 全部JS(未壓縮) ├── kindeditor-min.js 僅KindEditor JS(壓縮) ├── kindeditor.js 僅KindEditor JS(未壓縮) ├── lang 支持語言 ├── license.txt License ├── php PHP示例 ├── plugins KindEditor內部使用的插件 └── themes KindEditor主題

3、基本使用

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 <div style="margin: 0 auto; width: 500px;height: 300px;"> 9 <textarea id="content"></textarea> 10 </div> 11 12 <script src="/static/jquery-3.2.1.js"></script> 13 <script src="/static/kindeditor/kindeditor-all-min.js"></script> 14 <script> 15 $(function() { 16 KindEditor.create("#content", { 17 width: '400px', 18 height: '200px' 19 20 }) 21 }) 22 </script> 23 </body> 24 </html> View Code

4、詳細參數

http://kindeditor.net/docs/option.html

5、上傳文件示例

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 <form action="/upload_kind/" method="post"> 9 10 <div style="margin: 0 auto; width: 500px;height: 300px;"> 11 <textarea id="content"></textarea> 12 </div> 13 </form> 14 <script src="/static/jquery-3.2.1.js"></script> 15 <script src="/static/kindeditor/kindeditor-all-min.js"></script> 16 <script> 17 $(function() { 18 KindEditor.create("#content", { 19 width: '400px', 20 height: '200px', 21 extraFileUploadParams:{'csrfmiddlewaretoken':"{{ csrf_token }}"}, 22 uploadJson:'/upload_img/', 23 fileManagerJson: '/upload_file_manage/', 24 allowImageUpload: true, 25 allowFileManager:true 26 }) 27 }) 28 </script> 29 </body> 30 </html> html 1 def upload_img(request): 2 f = request.FILES.get('imgFile') 3 import os 4 path = os.path.join("static/images", f.name) 5 with open(path, 'wb') as file_obj: 6 for chunck in f.chunks(): 7 file_obj.write(chunck) 8 import json 9 dic = { 10 'error': 0, 11 'url': '/' + path, 12 'message': '錯誤了...' 13 } 14 return HttpResponse(json.dumps(dic)) 15 16 def upload_file_manage(request): 17 import os,time,json 18 dic = {} 19 root_path = 'C:/Users/Administrator/Desktop/DownTimeAnalysis/static/' 20 static_root_path = '/static/' 21 request_path = request.GET.get('path') 22 if request_path: 23 abs_current_dir_path = os.path.join(root_path, request_path) 24 move_up_dir_path = os.path.dirname(request_path.rstrip('/')) 25 dic['moveup_dir_path'] = move_up_dir_path + '/' if move_up_dir_path else move_up_dir_path 26 27 else: 28 abs_current_dir_path = root_path 29 dic['moveup_dir_path'] = '' 30 31 dic['current_dir_path'] = request_path 32 dic['current_url'] = os.path.join(static_root_path, request_path) 33 34 file_list = [] 35 for item in os.listdir(abs_current_dir_path): 36 abs_item_path = os.path.join(abs_current_dir_path, item) 37 a, exts = os.path.splitext(item) 38 is_dir = os.path.isdir(abs_item_path) 39 if is_dir: 40 temp = { 41 'is_dir': True, 42 'has_file': True, 43 'filesize': 0, 44 'dir_path': '', 45 'is_photo': False, 46 'filetype': '', 47 'filename': item, 48 'datetime': time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(os.path.getctime(abs_item_path))) 49 } 50 else: 51 temp = { 52 'is_dir': False, 53 'has_file': False, 54 'filesize': os.stat(abs_item_path).st_size, 55 'dir_path': '', 56 'is_photo': True if exts.lower() in ['.jpg', '.png', '.jpeg'] else False, 57 'filetype': exts.lower().strip('.'), 58 'filename': item, 59 'datetime': time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(os.path.getctime(abs_item_path))) 60 } 61 62 file_list.append(temp) 63 dic['file_list'] = file_list 64 return HttpResponse(json.dumps(dic)) View

路由系統

url(r'^kind/$', views.kind),url(r'^upload_img/', views.upload_img), # 前面有一個kind,視圖函數可以獲取參數dir來區分是文件還是其他。url(r'^upload_file_manage/', views.upload_file_manage),

?

?

6、XSS過濾特殊標簽

處理依賴

pip3 install beautifulsoup4 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 from bs4 import BeautifulSoup 4 5 6 class XSSFilter(object): 7 __instance = None 8 9 def __init__(self): 10 # XSS白名單 11 self.valid_tags = { 12 "font": ['color', 'size', 'face', 'style'], 13 'b': [], 14 'div': [], 15 "span": [], 16 "table": [ 17 'border', 'cellspacing', 'cellpadding' 18 ], 19 'th': [ 20 'colspan', 'rowspan' 21 ], 22 'td': [ 23 'colspan', 'rowspan' 24 ], 25 "a": ['href', 'target', 'name'], 26 "img": ['src', 'alt', 'title'], 27 'p': [ 28 'align' 29 ], 30 "pre": ['class'], 31 "hr": ['class'], 32 'strong': [] 33 } 34 35 @classmethod 36 def instance(cls): 37 if not cls.__instance: 38 obj = cls() 39 cls.__instance = obj 40 return cls.__instance 41 42 def process(self, content): 43 soup = BeautifulSoup(content, 'lxml') 44 # 遍歷所有HTML標簽 45 for tag in soup.find_all(recursive=True): 46 # 判斷標簽名是否在白名單中 47 if tag.name not in self.valid_tags: 48 tag.hidden = True 49 if tag.name not in ['html', 'body']: 50 tag.hidden = True 51 tag.clear() 52 continue 53 # 當前標簽的所有屬性白名單 54 attr_rules = self.valid_tags[tag.name] 55 keys = list(tag.attrs.keys()) 56 for key in keys: 57 if key not in attr_rules: 58 del tag[key] 59 60 return soup.renderContents() 61 62 63 if __name__ == '__main__': 64 html = """<p class="title"> 65 <b>The Dormouse's story</b> 66 </p> 67 <p class="story"> 68 <div name='root'> 69 Once upon a time there were three little sisters; and their names were 70 <a href="http://example.com/elsie" class="sister c1" style='color:red;background-color:green;' id="link1"><!-- Elsie --></a> 71 <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and 72 <a href="http://example.com/tillie" class="sister" id="link3">Tilffffffffffffflie</a>; 73 and they lived at the bottom of a well. 74 <script>alert(123)</script> 75 </div> 76 </p> 77 <p class="story">...</p>""" 78 79 v = XSSFilter.instance().process(html) 80 print(v) XSS 示例 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 from bs4 import BeautifulSoup 4 5 6 class XSSFilter(object): 7 __instance = None 8 9 def __init__(self): 10 # XSS白名單 11 self.valid_tags = { 12 "font": ['color', 'size', 'face', 'style'], 13 'b': [], 14 'div': [], 15 "span": [], 16 "table": [ 17 'border', 'cellspacing', 'cellpadding' 18 ], 19 'th': [ 20 'colspan', 'rowspan' 21 ], 22 'td': [ 23 'colspan', 'rowspan' 24 ], 25 "a": ['href', 'target', 'name'], 26 "img": ['src', 'alt', 'title'], 27 'p': [ 28 'align' 29 ], 30 "pre": ['class'], 31 "hr": ['class'], 32 'strong': [] 33 } 34 35 def __new__(cls, *args, **kwargs): 36 """ 37 單例模式 38 :param cls: 39 :param args: 40 :param kwargs: 41 :return: 42 """ 43 if not cls.__instance: 44 obj = object.__new__(cls, *args, **kwargs) 45 cls.__instance = obj 46 return cls.__instance 47 48 def process(self, content): 49 soup = BeautifulSoup(content, 'lxml') 50 # 遍歷所有HTML標簽 51 for tag in soup.find_all(recursive=True): 52 # 判斷標簽名是否在白名單中 53 if tag.name not in self.valid_tags: 54 tag.hidden = True 55 if tag.name not in ['html', 'body']: 56 tag.hidden = True 57 tag.clear() 58 continue 59 # 當前標簽的所有屬性白名單 60 attr_rules = self.valid_tags[tag.name] 61 keys = list(tag.attrs.keys()) 62 for key in keys: 63 if key not in attr_rules: 64 del tag[key] 65 66 return soup.renderContents() 67 68 69 if __name__ == '__main__': 70 html = """<p class="title"> 71 <b>The Dormouse's story</b> 72 </p> 73 <p class="story"> 74 <div name='root'> 75 Once upon a time there were three little sisters; and their names were 76 <a href="http://example.com/elsie" class="sister c1" style='color:red;background-color:green;' id="link1"><!-- Elsie --></a> 77 <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and 78 <a href="http://example.com/tillie" class="sister" id="link3">Tilffffffffffffflie</a>; 79 and they lived at the bottom of a well. 80 <script>alert(123)</script> 81 </div> 82 </p> 83 <p class="story">...</p>""" 84 85 obj = XSSFilter() 86 v = obj.process(html) 87 print(v) 基于__new__實現單例模式示例

7、保存

直接form提交,視圖函數接收對應的textarea的name就好了。

1 def upload_kind(request): 2 print(request.POST.get('content')) 3 return HttpResponse('ok') View

?

?

組合搜索

大家一定對上面這張圖不陌生,這就是一個很經典的組合搜索。

下面我們來做一個簡單的搜索。

1 class ArticleType(models.Model): 2 caption = models.CharField(max_length=32) 3 4 5 class Category(models.Model): 6 name = models.CharField(max_length=32) 7 8 9 class Article(models.Model): 10 title = models.CharField(max_length=32) 11 content = models.CharField(max_length=255) 12 category = models.ForeignKey(to='Category') 13 article_type = models.ForeignKey(to='ArticleType') models.py HTML 1 def article(request, *args, **kwargs): 2 result = models.Article.objects.all() 3 return render(request, 'article.html', {'result':result}) View

去數據庫補充點數據,然后就可以運行了。

先把所有的選擇項列出來。

1 <h1>過濾條件</h1> 2 <div class="condition-div"> 3 <div><a>全部</a> 4 {% for row in article_type %}#} 5 <a>{{ row.caption }}</a> 6 {% endfor %}#} 7 </div> 8 <div><a>全部</a> 9 {% for row in category%}#} 10 <a>{{ row.name}}</a> 11 {% endfor %}#} 12 </div> 13 </div> HTML 1 def article(request, *args, **kwargs): 2 article_type_list = models.ArticleType.objects.all() 3 category = models.Category.objects.all() 4 result = models.Article.objects.all() 5 return render( 6 request, 7 "article.html", 8 { 9 "result": result, 10 "article_type": article_type_list, 11 "category": category 12 } 13 ) view

這時候再來好好研究一下網頁的邏輯

點完SUV,跳到了SUV的頁面,對SUV進行刪選,但是后面還有一串字符,-0-1-1等等,不難發現這是用正則做的路由參數,加上p可以固定不同的類型對應不同的位置參數。

url(r'^article-(?P<article_type_id>\d+)-(?P<category_id>\d+).html', views.article),

但是,還有一個問題,比如選擇了能源為汽油,又要選擇座位來組合怎么做呢?

首先,需要先記錄下當前的篩選參數,當然,url已經做到了,所以我們修改下URL

url(r'^article-(?P<article_type_id>\d+)-(?P<category_id>\d+).html', views.article, name='article'),

看到name,大家一定記起來了,這里運用到了反轉,記錄動態URL。先記錄下url里面的參數,再把參數傳遞給前臺,告訴前臺,那么做能源篩選的時候,是不是可以直接生成一個url,記錄下所有其他選擇的標簽的參數,再加入自身的id。上代碼:

1 def article(request, *args, **kwargs): 2 # from django.urls import reverse 3 # url = reverse('article', kwargs=kwargs) 4 # print(url) # 強行帶了波url的節奏,其實并不需要用到,因為url傳過來的id已經被處理成字典形式了,可以區分開的。我們拿到**kwargs 5 condition = {} 6 for k, v in kwargs.items(): 7 kwargs[k] = int(v) 8 if v == '0': 9 pass 10 else: 11 condition[k] = v #這里的邏輯是因為全部這個標簽,數據庫的類別ID是自增的,所以設置0是最保險的。在后臺把所有為0的全部過濾掉,不然會查詢不到數據的。 12 article_type_list = models.ArticleType.objects.all() 13 category = models.Category.objects.all() 14 # result = models.Article.objects.filter(article_type_id=1, category_id=2) 15 result = models.Article.objects.filter(**condition) 16 return render( 17 request, 18 "article.html", 19 { 20 "result": result, 21 "article_type": article_type_list, 22 "category": category, 23 "arg_dict": kwargs, 24 } 25 ) View 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <style> 7 .condition-div a{ 8 display: inline-block; 9 padding: 2px 3px; 10 margin: 3px 5px; 11 border: 1px solid slategrey; 12 } 13 .condition-div a.active{ 14 background-color: lightslategrey; 15 } 16 </style> 17 </head> 18 <body> 19 <h1>過濾條件</h1> 20 <div class="condition-div"> 21 <div> 22 {% if arg_dict.article_type_id == 0 %} 23 <a class="active" href="/app01/article-0-{{ arg_dict.category_id }}.html">全部</a> 24 {% else %} 25 <a href="/app01/article-0-{{ arg_dict.category_id }}.html">全部</a> 26 {% endif %} 27 {% for row in article_type %} 28 {% if row.id == arg_dict.article_type_id %} 29 <a class="active" href="/app01/article-{{ row.id }}-{{ arg_dict.category_id }}.html">{{ row.caption }}</a> 30 {% else %} 31 <a href="/app01/article-{{ row.id }}-{{ arg_dict.category_id }}.html">{{ row.caption }}</a> 32 {% endif %} 33 {% endfor %} 34 {# {% filter_article_type article_type arg_dict %}#} 35 </div> 36 <div> 37 38 {% if arg_dict.category_id == 0 %} 39 <a class="active" href="/app01/article-{{ arg_dict.article_type_id }}-0.html">全部</a> 40 {% else %} 41 <a href="/app01/article-{{ arg_dict.article_type_id }}-0.html">全部</a> 42 {% endif %} 43 {% for row in category %} 44 {% if row.id == arg_dict.category_id %} 45 <a class="active" href="/app01/article-{{ arg_dict.article_type_id }}-{{ row.id }}.html">{{ row.name }}</a> 46 {% else %} 47 <a href="/app01/article-{{ arg_dict.article_type_id }}-{{ row.id }}.html">{{ row.name }}</a> 48 {% endif %} 49 {% endfor %} 50 </div> 51 </div> 52 53 <h1>查詢結果</h1> 54 <ul> 55 {% for row in result %} 56 <li>{{ row.od }} - {{ row.title }}</li> 57 {% endfor %} 58 </ul> 59 60 </body> 61 </html> html

這時候基本上就已經做好了,前臺html里面的if else就不具體說了,主要就是加一個active class.

現在這個前臺看著太亂了,就是要強行少代碼,怎么辦?大家一定覺得很夸張。。。怎么減代碼??一臉懵逼,二臉懵逼,三臉懵逼。。。。。。

給大家體個醒,simple_tag,你一定會激動地叫起來,喔~~

剛好復習一下simple_tag 的制作思路,首先項目里面建一個templatetags文件夾,里面新建任意一個py文件。

1 #!/user/bin/env python 2 # -*-coding: utf-8-*- 3 from django import template 4 from django.utils.safestring import mark_safe 5 register = template.Library() 6 7 8 9 @register.simple_tag 10 def filter_all(arg_dict, k): 11 if k == 'article_type_id': 12 n1 = arg_dict['article_type_id'] 13 n2 = arg_dict['category_id'] 14 if n1 == 0: 15 ret = '<a class="active" href="/app01/article-0-%s.html">全部</a>' % n2 16 else: 17 ret = '<a href="/app01/article-0-%s.html">全部</a>' % n2 18 else: 19 n1 = arg_dict['category_id'] 20 n2 = arg_dict['article_type_id'] 21 if n1 == 0: 22 ret = '<a class="active" href="/app01/article-%s-0.html">全部</a>' % n2 23 else: 24 ret = '<a href="/app01/article-%s-0.html">全部</a>' % n2 25 return mark_safe(ret) 26 27 @register.simple_tag 28 def filter_article_type(article_type, arg_dict): 29 ''' 30 {% for row in article_type %} 31 {% if row.id == arg_dict.article_type_id %} 32 <a class="active" href="/app01/article-{{ row.id }}-{{ arg_dict.category_id }}.html">{{ row.caption }}</a> 33 {% else %} 34 <a href="/app01/article-{{ row.id }}-{{ arg_dict.category_id }}.html">{{ row.caption }}</a> 35 {% endif %} 36 {% endfor %} 37 :return: 38 ''' 39 ret = [] 40 for row in article_type: 41 if row.id == arg_dict['article_type_id']: 42 temp = '<a class="active" href="/app01/article-%s-%s.html">%s</a>' % \ 43 (row.id, arg_dict['category_id'], row.caption) 44 else: 45 temp = '<a href="/app01/article-%s-%s.html">%s</a>' % (row.id, arg_dict['category_id'], row.caption) 46 ret.append(temp) 47 return mark_safe(''.join(ret)) 48 49 50 @register.simple_tag 51 def filter_category(category, arg_dict): 52 ''' 53 {% for row in category %} 54 {% if row.id == arg_dict.category_id %} 55 <a class="active" href="/app01/article-{{ arg_dict.article_type_id }}-{{ row.id }}.html">{{ row.name }}</a> 56 {% else %} 57 <a href="/app01/article-{{ arg_dict.article_type_id }}-{{ row.id }}.html">{{ row.name }}</a> 58 {% endif %} 59 {% endfor %} 60 :return: 61 ''' 62 ret = [] 63 for row in category: 64 if row.id == arg_dict['category_id']: 65 temp = '<a class="active" href="/app01/article-%s-%s.html">%s</a>' % \ 66 (arg_dict['article_type_id'], row.id, row.name) 67 else: 68 temp = '<a href="/app01/article-%s-%s.html">%s</a>' % \ 69 (arg_dict['article_type_id'], row.id, row.name) 70 ret.append(temp) 71 return mark_safe(''.join(ret)) simple_tag 1 {% load filter %} 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <meta charset="UTF-8"> 6 <title>Title</title> 7 <style> 8 .condition-div a{ 9 display: inline-block; 10 padding: 2px 3px; 11 margin: 3px 5px; 12 border: 1px solid slategrey; 13 } 14 .condition-div a.active{ 15 background-color: lightslategrey; 16 } 17 </style> 18 </head> 19 <body> 20 <h1>過濾條件</h1> 21 <div class="condition-div"> 22 <div> 23 {% filter_all arg_dict 'article_type_id' %} 24 {% filter_article_type article_type arg_dict %} 25 </div> 26 <div> 27 {% filter_all arg_dict 'category_id' %} 28 {% filter_category category arg_dict %} 29 </div> 30 </div> 31 32 <h1>查詢結果</h1> 33 <ul> 34 {% for row in result %} 35 <li>{{ row.od }} - {{ row.title }}</li> 36 {% endfor %} 37 </ul> 38 39 </body> 40 </html> View Code

這樣才看著高端嘛。。。給一個不會Django的看到這個模板,直接瘋了,什么鬼。。。我還是回家種田吧。。。

?

?

?

單例模式

單例模式其實算是對于面向對象的基礎,類的一次補充。按照之前的思路,每次對于類的方法的調用,都需要實例化,這樣就會產生多個實例化對象。

看下面這個示例

1 class Foo: 2 instance = None 3 def __init__(self): 4 pass 5 6 def process(self): 7 print(123) 8 9 obj1 = Foo() 10 obj2 = Foo() 11 print(id(obj1), id(obj2)) View Code

輸出結果:

1892383886976 1892383887032

對于上面這種情況,根本不需要實例化多個對象來處理,某種意義上是一種浪費。。。所以我們可以簡單修改下。

1 class Foo: 2 instance = None 3 def __init__(self): 4 pass 5 6 @classmethod 7 def get_instance(cls): 8 if Foo.instance: 9 return Foo.instance 10 else: 11 Foo.instance = Foo() 12 return Foo.instance 13 14 def process(self): 15 print(123) 16 17 18 obj1 = Foo.get_instance() 19 obj2 = Foo.get_instance() 20 print(id(obj1), id(obj2)) View Code

結果

2694976409216 2694976409216

這里判斷了已經有一個實例化對象,就返回了實例化對象內存地址給后面的實例化過程。

單例模式(Singleton Pattern)是一種常用的軟件設計模式,該模式的主要目的是確保某一個類只有一個實例存在。當你希望在整個系統中,某個類只能出現一個實例時,單例對象就能派上用場。

比如,某個服務器程序的配置信息存放在一個文件中,客戶端通過一個 AppConfig 的類來讀取配置文件的信息。如果在程序運行期間,有很多地方都需要使用配置文件的內容,也就是說,很多地方都需要創建 AppConfig 對象的實例,這就導致系統中存在多個 AppConfig 的實例對象,而這樣會嚴重浪費內存資源,尤其是在配置文件內容很多的情況下。事實上,類似 AppConfig 這樣的類,我們希望在程序運行期間只存在一個實例對象。

?

使用模塊

其實,Python 的模塊就是天然的單例模式,因為模塊在第一次導入時,會生成?.pyc?文件,當第二次導入時,就會直接加載?.pyc?文件,而不會再次執行模塊代碼。因此,我們只需把相關的函數和數據定義在一個模塊中,就可以獲得一個單例對象了。如果我們真的想要一個單例類,可以考慮這樣做:

1 # mysingleton.py 2 class My_Singleton(object): 3 def foo(self): 4 pass 5 6 my_singleton = My_Singleton() View Code

將上面的代碼保存在文件?mysingleton.py?中,然后這樣使用:

from mysingleton import my_singletonmy_singleton.foo()

?

使用__new__

這里還是用最先引入話題的實例來講解。其實上面的那個類方法算是低級的單例模式,因為我們改變了類的實例化方法了。

1 class Foo(object): 2 instance = None 3 def __init__(self): 4 self.name = 'dandy' 5 6 def __new__(cls, *args, **kwargs): 7 if not Foo.instance: 8 Foo.instance = object.__new__(cls, *args, **kwargs) 9 return Foo.instance 10 11 def process(self): 12 print(123) 13 14 obj1 = Foo() 15 obj2 = Foo() 16 print(obj1, obj2) View Code <__main__.Foo object at 0x000001F599138EB8> <__main__.Foo object at 0x000001F599138EB8>

?

?

beautifulsoup4

快速開始

1 html_doc = """ 2 <html><head><title>The Dormouse's story</title></head> 3 <body> 4 <p class="title"><b>The Dormouse's story</b></p> 5 6 <p class="story">Once upon a time there were three little sisters; and their names were 7 <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>, 8 <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and 9 <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>; 10 and they lived at the bottom of a well.</p> 11 12 <p class="story">...</p> 13 """ 14 15 from bs4 import BeautifulSoup 16 soup = BeautifulSoup(html_doc) 17 18 print(soup.prettify()) View Code # <html> # <head> # <title> # The Dormouse's story # </title> # </head> # <body> # <p class="title"> # <b> # The Dormouse's story # </b> # </p> # <p class="story"> # Once upon a time there were three little sisters; and their names were # <a class="sister" href="http://example.com/elsie" id="link1"> # Elsie # </a> # , # <a class="sister" href="http://example.com/lacie" id="link2"> # Lacie # </a> # and # <a class="sister" href="http://example.com/tillie" id="link2"> # Tillie # </a> # ; and they lived at the bottom of a well. # </p> # <p class="story"> # ... # </p> # </body> # </html>

?

幾個簡單的瀏覽結構化數據的方法:

soup.title # <title>The Dormouse's story</title>soup.title.name # u'title'soup.title.string # u'The Dormouse's story'soup.title.parent.name # u'head'soup.p # <p class="title"><b>The Dormouse's story</b></p>soup.p['class'] # u'title'soup.a # <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>soup.find_all('a') # [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>, # <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, # <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]soup.find(id="link3") # <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>

?

遍歷尋找<a>標簽的鏈接:

for link in soup.find_all('a'):print(link.get('href'))# http://example.com/elsie# http://example.com/lacie# http://example.com/tillie

獲取文檔中所有文字內容:

print(soup.get_text())# The Dormouse's story # # The Dormouse's story # # Once upon a time there were three little sisters; and their names were # Elsie, # Lacie and # Tillie; # and they lived at the bottom of a well. # # ...

主要解析器,優缺點:

解析器使用方法優勢劣勢
Python標準庫BeautifulSoup(markup,?"html.parser")
  • Python的內置標準庫
  • 執行速度適中
  • 文檔容錯能力強
  • Python 2.7.3 or 3.2.2)前 的版本中文檔容錯能力差
lxml HTML 解析器BeautifulSoup(markup,?"lxml")
  • 速度快
  • 文檔容錯能力強
  • 需要安裝C語言庫
lxml XML 解析器

BeautifulSoup(markup,?["lxml",?"xml"])

BeautifulSoup(markup,?"xml")

  • 速度快
  • 唯一支持XML的解析器
  • 需要安裝C語言庫
html5libBeautifulSoup(markup,?"html5lib")
  • 最好的容錯性
  • 以瀏覽器的方式解析文檔
  • 生成HTML5格式的文檔
  • 速度慢
  • 不依賴外部擴展

?

推薦使用lxml作為解析器,因為效率更高. 在Python2.7.3之前的版本和Python3中3.2.2之前的版本,必須安裝lxml或html5lib, 因為那些Python版本的標準庫中內置的HTML解析方法不夠穩定.

提示: 如果一段HTML或XML文檔格式不正確的話,那么在不同的解析器中返回的結果可能是不一樣的,查看?解析器之間的區別?了解更多細節

將一段文檔傳入BeautifulSoup 的構造方法,就能得到一個文檔的對象, 可以傳入一段字符串或一個文件句柄.

from bs4 import BeautifulSoupsoup = BeautifulSoup(open("index.html"))soup = BeautifulSoup("<html>data</html>")

首先,文檔被轉換成Unicode,并且HTML的實例都被轉換成Unicode編碼

BeautifulSoup("Sacré bleu!") <html><head></head><body>Sacré bleu!</body></html>

然后,Beautiful Soup選擇最合適的解析器來解析這段文檔,如果手動指定解析器那么Beautiful Soup會選擇指定的解析器來解析文檔

?

對象的種類

Beautiful Soup將復雜HTML文檔轉換成一個復雜的樹形結構,每個節點都是Python對象,所有對象可以歸納為4種:?Tag?,?NavigableString?,?BeautifulSoup?,?Comment?.

Tag

Tag?對象與XML或HTML原生文檔中的tag相同:

soup = BeautifulSoup('<b class="boldest">Extremely bold</b>') tag = soup.b type(tag) # <class 'bs4.element.Tag'>

Name & Attributes

每個tag都有自己的名字,通過 .name 來獲取: tag.name # u'b'如果改變了tag的name,那將影響所有通過當前Beautiful Soup對象生成的HTML文檔: tag.name = "blockquote" tag # <blockquote class="boldest">Extremely bold</blockquote>一個tag可能有很多個屬性. tag <b class="boldest"> 有一個 “class” 的屬性,值為 “boldest” . tag的屬性的操作方法與字典相同: tag['class'] # u'boldest'也可以直接”點”取屬性, 比如: .attrs : tag.attrs # {u'class': u'boldest'}tag的屬性可以被添加,刪除或修改. 再說一次, tag的屬性操作方法與字典一樣 tag['class'] = 'verybold' tag['id'] = 1 tag # <blockquote class="verybold" id="1">Extremely bold</blockquote>del tag['class'] del tag['id'] tag # <blockquote>Extremely bold</blockquote>tag['class'] # KeyError: 'class' print(tag.get('class')) # None

?

多值屬性

HTML 4定義了一系列可以包含多個值的屬性.在HTML5中移除了一些,卻增加更多.最常見的多值的屬性是 class (一個tag可以有多個CSS的class). 還有一些屬性?rel?,?rev?,?accept-charset?,?headers?,?accesskey?. 在Beautiful Soup中多值屬性的返回類型是list:

css_soup = BeautifulSoup('<p class="body strikeout"></p>') css_soup.p['class'] # ["body", "strikeout"]css_soup = BeautifulSoup('<p class="body"></p>') css_soup.p['class'] # ["body"]

如果某個屬性看起來好像有多個值,但在任何版本的HTML定義中都沒有被定義為多值屬性,那么Beautiful Soup會將這個屬性作為字符串返回

id_soup = BeautifulSoup('<p id="my id"></p>') id_soup.p['id'] # 'my id'

將tag轉換成字符串時,多值屬性會合并為一個值

rel_soup = BeautifulSoup('<p>Back to the <a rel="index">homepage</a></p>') rel_soup.a['rel'] # ['index'] rel_soup.a['rel'] = ['index', 'contents'] print(rel_soup.p) # <p>Back to the <a rel="index contents">homepage</a></p>

如果轉換的文檔是XML格式,那么tag中不包含多值屬性

xml_soup = BeautifulSoup('<p class="body strikeout"></p>', 'xml') xml_soup.p['class'] # u'body strikeout'

  

遍歷字符串

字符串常被包含在tag內.Beautiful Soup用?NavigableString?類來包裝tag中的字符串:

tag.string # u'Extremely bold' type(tag.string) # <class 'bs4.element.NavigableString'>

一個?NavigableString?字符串與Python中的Unicode字符串相同,并且還支持包含在?遍歷文檔樹?和?搜索文檔樹?中的一些特性. 通過?unicode()?方法可以直接將?NavigableString?對象轉換成Unicode字符串:

unicode_string = unicode(tag.string) unicode_string # u'Extremely bold' type(unicode_string) # <type 'unicode'>

tag中包含的字符串不能編輯,但是可以被替換成其它的字符串,用?replace_with()?方法:

tag.string.replace_with("No longer bold") tag # <blockquote>No longer bold</blockquote>

NavigableString?對象支持?遍歷文檔樹?和?搜索文檔樹?中定義的大部分屬性, 并非全部.尤其是,一個字符串不能包含其它內容(tag能夠包含字符串或是其它tag),字符串不支持?.contents?或?.string?屬性或?find()?方法.

如果想在Beautiful Soup之外使用?NavigableString?對象,需要調用?unicode()?方法,將該對象轉換成普通的Unicode字符串,否則就算Beautiful Soup已方法已經執行結束,該對象的輸出也會帶有對象的引用地址.這樣會浪費內存.

更多請參考:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

1 result = '''<p>千萬人<strong>較</strong>去年我</p> 2 <p>請問千萬人<span style="color: #ff6600;">群若群感通片沒人</span>呢 而非狗肉<span style="font-family: 'Microsoft YaHei';">人GV奇</span>偶偶陪<span style="font-family: 仿宋;">你圍毆</span>既然v</p> 3 <p>我打完分配人</p> 4 <script>alert(123)</script>''' 5 6 from bs4 import BeautifulSoup 7 soup = BeautifulSoup(result, 'html.parser') 8 tag = soup.find('script') # 查詢script標簽 9 tag.clear() # 清除掉標簽,2個script:<script></script> 10 tag.hidden = True # 隱藏標簽中的內容 11 12 span = soup.find('span') # 找到span標簽 13 del span.attrs['style'] # 刪除所有屬性 14 content = soup.decode() # 15 print(content) 16 17 ######## 18 <p>千萬人<strong>較</strong>去年我</p> 19 <p>請問千萬人<span>群若群感通片沒人</span>呢 而非狗肉<span style="font-family: 'Microsoft YaHei';">人GV奇</span>偶偶陪<span style="font-family: 仿宋;">你圍毆</span>既然v</p> 20 <p>我打完分配人</p> View Code

對于標簽的白名單

1 result = '''<p>千萬人<strong>較</strong>去年我</p> 2 <p>請問千萬人<span style="color: #ff6600;">群若群感通片沒人</span>呢 而非狗肉<span style="font-family: 'Microsoft YaHei';">人GV奇</span>偶偶陪<span style="font-family: 仿宋;">你圍毆</span>既然v</p> 3 <p>我打完分配人</p> 4 <script>alert(123)</script>''' 5 6 from bs4 import BeautifulSoup 7 soup = BeautifulSoup(result, 'html.parser') 8 tags = ['p', 'span'] 9 10 for tag in soup.find_all(): 11 if tag.name in tags: 12 pass 13 else: 14 tag.hidden = True 15 tag.clear() 16 17 content = soup.decode() 18 print(content) 19 ################## 20 <p>千萬人去年我</p> 21 <p>請問千萬人<span style="color: #ff6600;">群若群感通片沒人</span>呢 而非狗肉<span style="font-family: 'Microsoft YaHei';">人GV奇</span>偶偶陪<span style="font-family: 仿宋;">你圍毆</span>既然v</p> 22 <p>我打完分配人</p> View Code 1 result = '''<p class='c1' id='p1'>千萬人<strong>較</strong>去年我</p> 2 <p>請問千萬人<span id='span11' class='span-class' style="color: #ff6600;">群若群感通片沒人</span>呢 而非狗肉<span style="font-family: 'Microsoft YaHei';">人GV奇</span>偶偶陪<span style="font-family: 仿宋;">你圍毆</span>既然v</p> 3 <p>我打完分配人</p> 4 <script>alert(123)</script>''' 5 6 from bs4 import BeautifulSoup 7 soup = BeautifulSoup(result, 'html.parser') 8 tags = { 9 'p': ['class'], 10 'span': ['id',] 11 } 12 13 for tag in soup.find_all(): 14 if tag.name in tags: 15 pass 16 else: 17 tag.hidden = True 18 tag.clear() 19 continue 20 input_attrs = tag.attrs 21 valid_attrs = tags[tag.name] 22 for key in list(input_attrs.keys()): 23 if key in valid_attrs: 24 pass 25 else: 26 del tag.attrs[key] 27 content = soup.decode() 28 print(content) View Code

?

轉載于:https://www.cnblogs.com/wuzdandz/p/8399418.html

總結

以上是生活随笔為你收集整理的Python 21 Django 实用小案例1的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

99久热在线精品视频 | 日本少妇高清做爰视频 | 色爱成人网 | 国产精品97 | 韩日电影在线免费看 | 国产精品嫩草影视久久久 | 午夜黄色大片 | 91精品国产成 | 欧美国产日韩一区二区三区 | 在线黄色av电影 | 亚洲精品色婷婷 | 久久精品3 | 久久久国产在线视频 | 精品国产99国产精品 | 激情图片区 | 91成年人网站 | 狠狠干夜夜操天天爽 | 亚洲最新精品 | 精品久久1 | 天天色天天色 | 久久免费的精品国产v∧ | 亚洲欧美日韩在线看 | 综合网天天 | 国产视频在线观看一区二区 | 日韩精品2区 | 亚洲一级性| 欧美成人亚洲成人 | 在线小视频国产 | 99视频久久 | 伊人网av | 粉嫩av一区二区三区四区在线观看 | 在线色亚洲 | 日韩av午夜在线观看 | 久久精品国产精品亚洲精品 | 亚洲一级黄色大片 | 9i看片成人免费看片 | 免费看的国产视频网站 | 国产精品剧情 | 国际精品久久 | 91人人视频在线观看 | 精品一区二区电影 | 精品国产欧美一区二区 | 亚洲欧洲日韩在线观看 | 在线国产片| 日p视频在线观看 | 婷婷爱五月天 | 久草精品视频在线观看 | 成人97视频一区二区 | 国产青春久久久国产毛片 | 国产精品理论在线观看 | 五月婷婷操 | 国产精品美女久久久久久免费 | 精品在线观看视频 | 久久成人国产精品免费软件 | 精品国产亚洲日本 | 国产精品美女免费 | 九色精品在线 | 国产精品一区二区三区在线 | 在线中文视频 | 成年人免费电影在线观看 | 综合精品久久久 | 91麻豆精品 | 久久欧美在线电影 | 成人黄在线观看 | 人人草在线视频 | 69av免费视频 | 91天天视频 | 久久久精品国产一区二区三区 | 日韩小视频网站 | 中文字幕成人在线 | 欧美精品一区二区三区一线天视频 | 亚洲日韩中文字幕在线播放 | 91精品一区二区三区蜜臀 | 日韩免费大片 | 日韩精品综合在线 | 高清国产在线一区 | 91精品啪啪 | 色插综合| 久久综合五月天 | 亚洲一级片在线看 | 美女黄视频免费看 | 九九免费在线看完整版 | 婷婷综合在线 | 欧洲精品久久久久毛片完整版 | 国产精彩视频一区 | 国产在线1区 | 国产精品成人免费一区久久羞羞 | 国产精品高清免费在线观看 | 欧美日韩中文在线观看 | 国产999精品久久久久久绿帽 | 亚洲欧美视频 | 久久国产99 | 精品国产视频在线观看 | 操操综合 | 日韩爱爱网站 | 黄a网站 | 国产精品自产拍在线观看桃花 | 天天操夜夜操国产精品 | 欧美大片在线观看一区 | 免费看精品久久片 | 日日夜夜天天操 | 黄色a一级片| 97色免费视频 | 久久久久一区二区三区四区 | 国产精品欧美日韩 | 欧美国产日韩在线观看 | 亚洲一区二区三区在线看 | 久久久久久久久亚洲精品 | 欧美巨大荫蒂茸毛毛人妖 | 99久久电影 | 天天爽夜夜操 | 1024手机基地在线观看 | 中文字幕乱偷在线 | 狠狠干,狠狠操 | 中文字幕免费在线看 | 中文字幕久久久精品 | 国产精品女同一区二区三区久久夜 | 综合网在线视频 | 久草在线视频看看 | 超碰日韩在线 | 东方av免费在线观看 | 99精品视频免费观看视频 | 天天碰天天操视频 | 天天射天天干天天 | 国产精品美女免费视频 | 91精品久久久久久综合乱菊 | 81国产精品久久久久久久久久 | 国产精品久久久av久久久 | 91亚洲精品国偷拍自产在线观看 | 黄色软件视频大全免费下载 | 国产福利精品在线观看 | 国产高清综合 | 日本在线观看一区二区 | 婷婷视频导航 | 欧美一级欧美一级 | 久久久国产精品成人免费 | 国产网站在线免费观看 | 国产大片黄色 | 国产黄色免费 | 久久 国产一区 | 欧美视频日韩视频 | 成人免费观看网址 | 国产黄色精品在线 | 曰韩精品| 国产在线播放一区二区三区 | av在线免费网站 | 国产1级视频| 久久久久一区二区三区 | 亚洲欧美久久 | 在线亚洲成人 | 91精品婷婷国产综合久久蝌蚪 | 国产精品网址在线观看 | 在线天堂日本 | 久久精品国产一区 | 欧美成人黄色 | 国产色在线,com | 中文字幕在 | 免费又黄又爽的视频 | 欧美精品三级 | 五月婷婷毛片 | 欧美精品一区二区免费 | 在线国产91 | 亚洲国产免费看 | 在线视频专区 | 成人资源站 | 在线观看视频 | 在线免费三级 | av亚洲产国偷v产偷v自拍小说 | 日韩免费中文 | 国产99久久精品一区二区300 | 国产一区二区三区网站 | 国产免费观看久久黄 | 丁香花在线视频观看免费 | 一级片视频在线 | 日韩av一区二区三区 | 欧美一区三区四区 | 日韩在线观看免费 | 中文字幕av网站 | 久久久久久久久久久综合 | 久久久精品福利视频 | 999视频在线播放 | 免费在线激情视频 | 成人激情开心网 | 久久综合久久综合九色 | a√天堂中文在线 | 久久成年人 | 欧美大片第1页 | 激情欧美一区二区三区 | 国产1级视频 | 国产一区二区三区高清播放 | 日韩av福利在线 | 黄色大片国产 | 蜜臀av免费一区二区三区 | 超碰精品在线 | 五月综合色婷婷 | 国产精品免费观看久久 | 91免费版在线 | av资源网在线播放 | 免费成人在线观看视频 | 日韩激情视频在线 | av色一区| 国产又粗又猛又爽 | www黄色软件 | 婷婷深爱网| 在线观看av黄色 | 免费合欢视频成人app | 99视频| 高潮久久久久久久久 | 久久美女视频 | 日本中文字幕视频 | 99综合影院在线 | 欧美视频国产视频 | 欧美最爽乱淫视频播放 | 欧美日韩有码 | 免费观看一区 | 欧美大香线蕉线伊人久久 | 岛国大片免费视频 | 国产精品18久久久久久久久 | 日韩免费看视频 | 欧美在线视频一区二区 | 天堂在线免费视频 | 久久久久久久久久久福利 | 天天操天天色天天射 | 在线激情av电影 | 亚洲精品乱码久久久一二三 | 色干综合| 国产视频久久久久 | 99久久精品国产一区 | 亚洲国产综合在线 | 99精品国产免费久久久久久下载 | 亚洲一一在线 | 国产成人av免费在线观看 | 亚洲91中文字幕无线码三区 | 国产精品亚州 | 人人草人人草 | 国产成人av电影在线观看 | 青草视频在线播放 | 精品久久久久久综合日本 | 成人午夜电影在线观看 | 久久久久国产a免费观看rela | 91高清免费观看 | www.91成人 | av综合站| 中文字幕色在线视频 | 国产精品自产拍在线观看 | 男女激情麻豆 | 在线观看av免费观看 | 亚洲精品1区2区3区 超碰成人网 | 免费网站在线 | 在线视频一区二区 | 亚洲激情在线播放 | 激情婷婷六月 | 中文字幕丝袜美腿 | av在线影片 | 亚洲精品视频一二三 | 国产在线资源 | 狠狠色伊人亚洲综合网站色 | 亚洲人成人99网站 | 天天夜操 | 久久伦理视频 | 99精品小视频 | 精品久久一级片 | 在线视频亚洲 | 日韩av一区二区在线 | 97超碰人人模人人人爽人人爱 | 国产精品电影一区 | 久久第四色| 日韩免费视频观看 | 五月婷视频 | 伊人av综合| 美女禁18| 久久九九国产视频 | 欧美一区二区三区激情视频 | 国产精品第7页 | 久久国内精品99久久6app | 五月激情在线 | 国产剧情av在线播放 | 中文字幕精品一区二区三区电影 | 狠狠黄| 夜夜躁天天躁很躁波 | 久久精品最新 | 国内精品国产三级国产aⅴ久 | 国产一区免费观看 | 日韩免费成人av | 99久久久久国产精品免费 | 在线观看欧美成人 | 日韩欧美有码在线 | 中文字幕在线视频第一页 | www.久久色.com| av网站免费看 | 免费精品在线 | 精壮的侍卫呻吟h | 91精品久久久久久久久久入口 | 久久精品久久精品 | 中文字幕色站 | 亚洲丝袜一区二区 | 91成人天堂久久成人 | 久久精品aaa | 99久国产 | 不卡av电影在线 | 久久久天天操 | 免费成人在线观看视频 | 久久综合偷偷噜噜噜色 | 精品在线观 | 国产老太婆免费交性大片 | 免费黄色av电影 | 欧美精品xxx | 天天射狠狠干 | 韩日精品中文字幕 | 91视频亚洲 | 狠狠狠狠狠操 | 成人影片在线播放 | 中文字幕在线看视频国产中文版 | 久久人人爽爽人人爽人人片av | 成年人免费在线观看 | 久草视频在线免费播放 | 五月婷婷中文 | 在线观看91精品国产网站 | 久草久视频 | 欧美久久久久 | 国产在线精品观看 | 国产精品一区二区av日韩在线 | 国产裸体永久免费视频网站 | 久久国产电影院 | 欧美三级在线播放 | 美女免费视频一区 | 国产在线久久久 | 国产精品高清免费在线观看 | 国产五月天婷婷 | 婷婷精品国产欧美精品亚洲人人爽 | 一区二区三区四区五区在线视频 | 婷婷视频 | 999久久国产 | 99精品视频免费全部在线 | 久久在线电影 | 国产91精品看黄网站 | 中文字幕av网站 | 激情婷婷综合网 | 98福利在线| 2021久久| 麻豆91精品91久久久 | 九九久久久久99精品 | 亚洲精品国偷拍自产在线观看 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 亚洲va欧美va人人爽春色影视 | 日本少妇视频 | 国产91精品一区二区麻豆亚洲 | 91av欧美 | 亚洲精品午夜久久久久久久 | 久久视奸 | 免费日韩一区二区三区 | 国产高清精 | 99爱国产精品 | 91亚洲网| 毛片无卡免费无播放器 | 久久视屏网 | 精品在线视频播放 | 久久精品高清 | 国产视频97 | 少妇精69xxtheporn | 亚洲成aⅴ人在线观看 | 在线观看一 | 天天色天天综合 | 国产成人精品亚洲 | 狠狠躁夜夜a产精品视频 | 亚洲精品2区 | 久久99精品久久久久久清纯直播 | 久久这里只有精品久久 | 成人黄色片在线播放 | 成人在线免费观看视视频 | 日韩一二三区不卡 | 天天色天天综合 | 日韩在线观看视频在线 | 亚洲欧美国产视频 | 最近日本中文字幕a | 久久三级视频 | 成人午夜影院在线观看 | 天天射天天干 | 91大神免费在线观看 | 亚洲专区 国产精品 | 97视频在线免费观看 | 免费av试看| 久久国产经典 | 精品不卡av | 女人18毛片90分钟 | 一区二区三区影院 | 欧美一二区视频 | 久久久久99精品成人片三人毛片 | 欧美午夜精品久久久久久孕妇 | av大全在线观看 | 韩国av一区二区三区 | 日韩欧美一区二区三区在线 | 久久天天躁夜夜躁狠狠躁2022 | 伊人亚洲综合网 | 欧美色综合 | 丁香影院在线 | 在线视频一二区 | 最近日本中文字幕a | 欧美日韩国产伦理 | 成人免费视频a | 国产高清福利在线 | 国产在线精品视频 | 国产精品一区二区av麻豆 | 久久久久 | 91精品国产高清 | 色婷婷久久久综合中文字幕 | 2021国产精品视频 | 国产一区二区视频在线播放 | 日韩成人精品一区二区 | 97成人免费视频 | 婷婷电影在线观看 | 亚洲成人在线免费 | 在线国产片 | 福利一区在线 | 九九久| 欧美尹人| 人人爱天天操 | 国产精品免费久久久 | 中文字幕在线视频国产 | 亚洲激情综合 | 久久99久久99精品免观看软件 | 2019精品手机国产品在线 | 激情在线网址 | 天天撸夜夜操 | 久久精品成人 | 免费看精品久久片 | 亚洲欧美视屏 | 69久久久久久久 | 一区二区三区日韩在线观看 | 免费一级特黄毛大片 | 一级免费黄色 | 亚洲专区欧美专区 | 亚洲六月丁香色婷婷综合久久 | 久久久久免费视频 | 亚洲高清91| 色婷婷激情电影 | av免费线看 | 一区二区三区日韩视频在线观看 | 激情网五月 | 综合久久综合久久 | 国产精品三级视频 | 日韩免费高清在线观看 | 久久开心激情 | 亚洲欧美成人在线 | 综合久久精品 | 美女视频黄网站 | 婷婷激情网站 | 国产精品乱码久久 | 欧美一区二区在线看 | 日本电影久久 | 国产精品亚州 | 亚洲精品欧美专区 | 国产二区视频在线 | 国产午夜剧场 | 久久成人免费 | japanesefreesex中国少妇 | 亚洲精品日韩av | 日韩高清不卡一区二区三区 | 日韩欧美在线观看一区二区 | 四虎8848免费高清在线观看 | 69精品视频在线观看 | 又污又黄的网站 | 久二影院| 中文字幕久久精品 | 天天搞天天干 | 成人黄色国产 | 精品一区二区久久久久久久网站 | 久久久久日本精品一区二区三区 | 久久成人在线 | 日韩中文字幕免费视频 | 成人精品久久久 | 91视频亚洲 | 91av视频在线观看 | 亚洲一二三在线 | 国产 一区二区三区 在线 | 亚洲精品在线国产 | 成人av直播 | 久久成人亚洲欧美电影 | 久久 一区 | 欧洲性视频 | 免费a网址 | 超碰人人超| 亚洲国产69 | 91视视频在线直接观看在线看网页在线看 | 粉嫩高清一区二区三区 | 91热爆视频 | 国产精品精品久久久久久 | 91视频麻豆 | 久久久91精品国产一区二区三区 | 精品99视频 | 伊人视频| 国产一区二区三区网站 | 国产乱码精品一区二区蜜臀 | 亚洲欧美国产精品久久久久 | 三级黄色免费 | 久久99亚洲精品 | 国产福利免费看 | 人人爱人人舔 | 国产一区二区三区四区在线 | 日韩精品高清视频 | 狠狠狠综合 | 天天干一干 | 激情五月婷婷综合网 | 日日夜夜天天综合 | 国产精品久久久久免费 | 日韩中文字幕第一页 | 日韩av电影网站在线观看 | 在线影院 国内精品 | 在线成人性视频 | 色婷婷播放 | 波多野结衣电影一区二区 | 在线看一级片 | 久久精品久久久久久久 | 久久久久亚洲精品男人的天堂 | 亚洲色图 校园春色 | 中文字幕亚洲在线观看 | 欧美一二三四在线 | 91网址在线 | www.色婷婷 | 精品高清美女精品国产区 | 蜜臀精品久久久久久蜜臀 | 国产精品igao视频网入口 | 国产一卡在线 | 日韩啪啪小视频 | av在线专区 | 欧美性做爰猛烈叫床潮 | 青春草免费在线视频 | 久久成人午夜视频 | 香蕉视频久久久 | 91色在线观看 | 午夜久久 | 国产超碰在线观看 | 免费高清在线观看成人 | 国产免费小视频 | 国产亚洲视频在线 | 久久精品久久综合 | 日韩中文在线电影 | 欧亚日韩精品一区二区在线 | 成人在线超碰 | 久久香蕉一区 | 精品国模一区二区三区 | 日韩有码中文字幕在线 | 丁香婷婷激情五月 | 欧美日韩国产区 | 久久久 激情 | 天天躁日日躁狠狠躁av中文 | 亚洲专区视频在线观看 | 丁香五月亚洲综合在线 | 黄色精品免费 | 久久精品99久久 | 国产精品黑丝在线观看 | 天天爽天天碰狠狠添 | 精品成人国产 | 成人在线小视频 | 丁香伊人网 | 欧美成人一区二区 | 成人av中文字幕在线观看 | 四虎在线免费观看 | 亚洲最大免费成人网 | 黄色av免费电影 | 玖玖在线观看视频 | 天天操夜操视频 | 婷婷四房综合激情五月 | 国产精品1000| 99久久99久久 | 最近中文字幕mv免费高清在线 | 美女免费网站 | 婷婷视频在线观看 | 一区二区三区日韩视频在线观看 | 国产成人精品久久亚洲高清不卡 | 中文字幕在线观看视频一区 | 国产精品一区二区久久久 | 香蕉视频在线播放 | 国产精品福利视频 | 操操综合网 | 国产精品久久一 | 婷婷激情5月天 | 中文字幕在线观看网站 | 日精品| 欧美色图东方 | 亚洲另类xxxx | 久久国产精品久久精品国产演员表 | 亚洲精品一区中文字幕乱码 | 欧美动漫一区二区三区 | 射射射综合网 | 久久成人高清 | 欧美作爱视频 | 久久一区二区三区国产精品 | 亚洲成a人片77777潘金莲 | 伊人午夜 | 亚洲国产精品成人av | 五月天网站在线 | www.av中文字幕.com| 国产高清日韩 | 波多野结衣电影一区二区 | 精品久久一二三区 | 久久久久亚洲a | 99久久久久久久久 | 国产综合精品久久 | 91久久影院| 91看片一区二区三区 | 99久久久久免费精品国产 | 久久不射电影院 | 亚洲免费不卡 | 99热在线观看 | 日本少妇高清做爰视频 | 亚洲精品色视频 | 免费观看www小视频的软件 | 日本在线h| 日韩欧美视频在线观看免费 | 免费在线观看国产精品 | 天天操天天添天天吹 | 午夜资源站 | 91资源在线播放 | 日韩激情视频在线 | 婷婷深爱五月 | 久亚洲精品| 99久久99久久| 摸bbb搡bbb搡bbbb | 天天操操| 一本一道久久a久久精品蜜桃 | 欧美精品第一 | 天天插狠狠插 | 国产精品九九久久99视频 | 91精品国产自产在线观看 | 亚洲成人xxx | 久草在线在线精品观看 | 亚洲精品久久久久中文字幕二区 | 亚洲精品在线视频播放 | 国产又粗又猛又爽又黄的视频先 | 日韩精品不卡在线观看 | 久久综合成人网 | 国产精品久久久久久久久岛 | 9在线观看免费 | 久久九九九九 | 成人av免费在线播放 | 福利视频第一页 | 五月天激情婷婷 | 日韩欧美高清在线观看 | 久久99国产综合精品免费 | 91丨九色丨勾搭 | av片在线观看| 欧美ⅹxxxxxx | 久久久久久久免费看 | 国产视频在线观看免费 | 五月天综合网 | 玖玖视频网| 亚洲干 | 国产成人黄色片 | 欧美日本不卡高清 | 国产精品毛片一区二区 | 亚洲黑丝少妇 | 九九久久精品 | 久久精品国产v日韩v亚洲 | 婷婷黄色片 | 精品国产一二三四区 | 日韩高清成人在线 | 免费看一级 | 亚洲综合激情 | 超碰97人人干 | 天天操夜夜爱 | 久久免费精品一区二区三区 | 久久人人爽人人爽人人片av软件 | 久久精品一区 | 97视频在线观看播放 | 久久免费在线视频 | 五月婷婷久久丁香 | 91九色在线观看 | 国产日韩欧美视频在线观看 | 日韩资源视频 | 欧美三级免费 | 一区 二区 精品 | 日韩,精品电影 | 国产亚洲日本 | 国产一区二区久久久久 | 日韩影视在线观看 | 一区二区三区动漫 | 亚洲欧美视频在线观看 | 日日操狠狠干 | 亚洲乱码精品久久久 | 国产一区二区高清 | 国产手机视频 | 亚洲精品视 | 亚洲一区二区麻豆 | 九九九热精品免费视频观看网站 | 黄色成人91 | 香蕉免费在线 | 看毛片网站 | 天天色棕合合合合合合 | 一区二区三区免费在线观看视频 | 六月色丁香 | 天天草av | 人人爱天天操 | 麻豆传媒一区二区 | 亚洲中字幕 | 国产97色在线 | 中文字幕在线观看视频一区二区三区 | 狠狠色狠狠色综合系列 | 国产在线观看你懂得 | 黄色软件在线看 | 久久久久免费看 | 天天操狠狠操网站 | 五月激情av | 国产高清99| 日本久久电影 | 在线中文字幕电影 | 久久中文网 | 玖玖在线视频观看 | 99久久精品无免国产免费 | 激情视频一区 | 岛国av在线不卡 | 国产精品99久久久久久久久久久久 | 亚洲精品在线观看中文字幕 | 午夜视频在线观看一区二区 | 精品国产亚洲日本 | 精品久久五月天 | 毛片的网址 | 日韩成人av在线 | 亚洲黄色激情小说 | 日本h视频在线观看 | 蜜臀久久99精品久久久无需会员 | 91插插插免费视频 | 欧美夫妻生活视频 | 中文字幕在线第一页 | 91精品国产高清自在线观看 | 色资源在线 | 91精品国产91久久久久福利 | 天天色婷婷 | 亚洲国产网站 | 成年人视频在线 | 五月天,com | 国产成人香蕉 | 黄色的网站免费看 | 日本三级人妇 | 99精品毛片 | 亚洲人xxx | 久久99久久99免费视频 | 久久福利综合 | 日韩高清av| 亚洲精品午夜久久久久久久 | 制服丝袜天堂 | 成人av观看 | 亚州精品天堂中文字幕 | 在线天堂v | 在线日韩精品视频 | 91精品一区国产高清在线gif | 婷婷丁香七月 | 国产资源精品在线观看 | 久久久久欧美精品 | 免费看十八岁美女 | av黄色成人| 99热在线免费观看 | 日本黄网站| aa一级片| av软件在线观看 | 欧美精选一区二区三区 | 国产资源网站 | 国产一区欧美在线 | 亚洲网站在线看 | 在线免费国产 | 欧美一级性生活 | 日韩丝袜| 成年人免费在线观看 | 欧美大片在线观看一区 | 激情五月婷婷综合 | 国产一级特黄毛片在线毛片 | 国产精品一区二区美女视频免费看 | 国产成人久久精品 | 国产最新视频在线观看 | 国产成人免费在线观看 | 亚洲 中文 在线 精品 | 久久这里只有精品首页 | 日本久久中文字幕 | 国产成人综合精品 | 日本不卡一区二区 | www黄com| 亚洲国产成人精品电影在线观看 | 成人久久综合 | 在线观看日韩精品视频 | 国产精品黑丝在线观看 | 久久久久日本精品一区二区三区 | 日韩精品高清不卡 | 婷婷丁香花五月天 | 亚洲天堂网站视频 | 久久国产热| 成人午夜精品久久久久久久3d | 国产一级免费视频 | 日韩在线观看一区二区三区 | 日韩在线免费播放 | av在线免费在线观看 | 久久成人国产精品 | 久久99视频免费 | 免费黄色av | 久久久久久久久久久福利 | 在线观看国产日韩 | 久久久精品国产免费观看同学 | 久久久久亚洲精品中文字幕 | 日韩一区二区三区高清免费看看 | 黄污视频网站大全 | 深夜免费福利视频 | 青青河边草免费直播 | 性色av免费看 | 成人黄色小说视频 | 精品免费观看 | 午夜视频久久久 | 久久精品一区二区 | 精品视频国产一区 | 中文字幕在线日亚洲9 | 中文乱码视频在线观看 | www.黄色在线 | 激情视频一区二区 | 国产视频黄 | www.操.com| 国产v视频| 天天综合网久久综合网 | av网站地址 | 69精品在线观看 | 免费婷婷| 91.dizhi永久地址最新 | 91在线视频导航 | 日本一区二区高清不卡 | 国产专区在线播放 | 亚洲理论在线观看 | 香蕉影院在线播放 | 在线一区电影 | 国产亚洲精品久久 | 性色视频在线 | 99九九99九九九视频精品 | 99精品国产99久久久久久福利 | 国产精品一区久久久久 | 日韩免费专区 | 涩五月婷婷| 欧美极度另类 | 国产久草在线观看 | 久久精品视频在线免费观看 | 色婷婷免费 | 六月丁香激情综合 | 51久久成人国产精品麻豆 | 草久久久久 | 日韩| 亚洲天堂自拍视频 | 深爱五月激情网 | 久草在线视频国产 | 欧美国产大片 | 久久人视频 | 超碰人人av | 成人av在线观 | 色多多污污 | 亚洲免费av片 | 日韩高清免费在线观看 | 国产剧情av在线播放 | 麻豆传媒视频在线播放 | 色综合天天狠天天透天天伊人 | 亚洲欧美国内爽妇网 | 狠狠干,狠狠操 | 欧美亚洲一级片 | 久久激情精品 | 麻豆国产精品一区二区三区 | 超碰av免费| 成人av在线播放网站 | 国产精品视频资源 | 在线中文字幕一区二区 | 天天操天天色天天射 | 久草网站| 欧美日韩大片在线观看 | 麻豆视频一区 | 激情 亚洲| 久久久久国产精品免费网站 | 色视频网站在线观看一=区 a视频免费在线观看 | 国产精品理论在线观看 | 欧美精品首页 | 首页av在线 | 日韩理论在线观看 | 91av蜜桃 | 成人中文字幕在线 | 亚洲电影在线看 | 日日摸日日添日日躁av | 亚洲欧美视频在线 | 国产精品电影一区二区 | 国产黄色av网站 | 一区二区三区久久 | 在线观看视频你懂的 | 久久综合九色综合欧美狠狠 | 欧美综合在线视频 | 黄色a大片 | 久久香蕉一区 | 国产精品9999 | 天天色天天骑天天射 | 狠狠色狠狠色综合日日92 | 日本黄色片一区二区 | 久久久在线 | 免费看搞黄视频网站 | 天天夜夜操 | 极品美女被弄高潮视频网站 | 日日日视频 | 五月丁香 | 国产一二三四在线视频 | 国产精品刺激对白麻豆99 | 97超碰人人| 久久午夜羞羞影院 | 久久免费激情视频 | 久久精品看 | 成人高清av在线 | 久久久久久国产精品999 | 97国产大学生情侣酒店的特点 | 香蕉影院在线观看 | 免费看一级特黄a大片 | 色视频成人在线观看免 | 欧美美女激情18p | 久草在线在线精品观看 | 在线观看片 | 欧美在线free | 婷婷中文字幕 | 成人一区在线观看 | 在线免费av观看 | 国产一级二级三级在线观看 | 欧美一级看片 | 日韩极品视频在线观看 | 国产在线观看h | 国产视频精选 | 亚洲日韩中文字幕在线播放 | 18久久久久 | 超碰公开97 | 99视频在线免费播放 | 欧美日韩另类在线 | 伊人影院在线观看 | 亚洲综合导航 | 在线观看视频在线观看 | 亚洲精品456在线播放乱码 | 国产真实精品久久二三区 | 视频99爱| 日日操夜夜操狠狠操 | 亚洲免费视频观看 | 国产成人一区二区啪在线观看 | 色综合久久久久久久 | 婷婷丁香导航 | 色av男人的天堂免费在线 | 伊人色播| 国产日韩在线视频 | 国产二区av | 亚洲最新av在线 | 欧美怡红院视频 | 久久黄色精品视频 | 伊人电影在线观看 | 黄色激情网址 | 天堂av免费 | 18pao国产成视频永久免费 | 91精品国产成 | 精品国自产在线观看 | 最新超碰| 九九99 | 国产麻豆精品传媒av国产下载 | 国产对白av | aaa免费毛片 | 亚洲免费视频在线观看 | 久久亚洲福利视频 | 男女拍拍免费视频 | 久久久香蕉视频 | 久久国产露脸精品国产 | 国产高清不卡在线 | 久久伊99综合婷婷久久伊 | 欧美日韩亚洲在线观看 | 91免费高清观看 | 久久成人午夜 | 免费福利视频网站 | 99精品国自产在线 | 欧美精品久久人人躁人人爽 | 久久激情视频 久久 | 99久精品 | 国产精品久久久久久久av大片 | 五月天九九| 超碰伊人网 | 久草精品视频在线看网站免费 | 久久视频二区 | 日韩mv欧美mv国产精品 | 福利视频一二区 | 免费看一级特黄a大片 | 999抗病毒口服液 | 91福利专区 | 国产看片 色 | 国产一级免费在线观看 | av中文字幕亚洲 | 99精品视频免费看 | 人人干人人超 | 日韩特级黄色片 | 超碰97人 | 久久综合久久久 | 欧美成年人在线视频 | 亚洲精品视频第一页 | 99久久婷婷国产综合亚洲 | 97国产精品 | 免费久久精品视频 | 九九免费观看视频 | 2023亚洲精品国偷拍自产在线 | 色狠狠婷婷 | 91高清在线看 | www欧美xxxx | 狠狠躁夜夜躁人人爽超碰97香蕉 |