首頁 後端開發 Python教學 Python開發【Django】:組合搜尋、JSONP、XSS過濾

Python開發【Django】:組合搜尋、JSONP、XSS過濾

Feb 22, 2017 am 10:37 AM
python開發

1、簡單實作

關聯檔:

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^index.html/$',views.index),
    url(r'^article/(?P<article_type>\d+)-(?P<category>\d+).html/$',views.article)
]

url.py
登入後複製
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .condition a{
            display:inline-block;
            padding: 3px 5px;
            border: 1px solid black;
        }
        .condition a.active{
            background-color: brown;
        }
    </style>
</head>
<body>
    <h2>过滤条件</h2>


    <div>
        {% if kwargs.article_type == 0 %}
            <a href="/article/0-{{ kwargs.category }}.html">全部</a>
        {% else %}
            <a href="/article/0-{{ kwargs.category }}.html">全部</a>
        {% endif %}

        {% for row in article_type %}
            {% if row.id == kwargs.article_type %}
                <a href="/article/{{ row.id }}-{{ kwargs.category }}.html">{{ row.caption }}</a>
            {% else %}
                <a  href="/article/{{ row.id }}-{{ kwargs.category }}.html">{{ row.caption }}</a>
            {% endif %}
        {% endfor %}
    </div>

    <div>
        {% if kwargs.category == 0 %}
            <a href="/article/{{ kwargs.article_type }}-0.html">全部</a>
        {% else %}
            <a href="/article/{{ kwargs.article_type }}-0.html">全部</a>
        {% endif %}

        {% for row in category %}
            {% if row.id == kwargs.category %}
                <a href="/article/{{ kwargs.article_type }}-{{ row.id }}.html">{{ row.caption }}</a>
            {% else %}
                <a href="/article/{{ kwargs.article_type }}-{{ row.id }}.html">{{ row.caption }}</a>
            {% endif %}
        {% endfor %}
    </div>

    <h2>查询结果</h2>
    <ul>
    {% for row in articles %}
        <li>{{ row.id }}-{{ row.title }}------[{{ row.article_type.caption }}]-[{{ row.category.caption }}]</li>
    {% endfor %}
    </ul>
</body>
</html>

article.html
登入後複製

資料庫結構:

from django.db import models
 
# Create your models here.
 
class Categoery(models.Model):
    caption = models.CharField(max_length=16)
 
class ArticleType(models.Model):
    caption = models.CharField(max_length=16)
 
class Article(models.Model):
 
    title = models.CharField(max_length=32)
    content = models.CharField(max_length=255)
 
    category = models.ForeignKey(Categoery)
    article_type = models.ForeignKey(ArticleType)
登入後複製

處理檔:

from . import  models
def article(request,*args,**kwargs):
 
    search_dict = {}
    for key,value in kwargs.items():
        kwargs[key] = int(value)        # 把字符类型转化为int类型 方便前端做if a == b  这样的比较
        if value !='0':
            search_dict[key] = value
    articles = models.Article.objects.filter(**search_dict) # 字典为空时表示搜索所有
 
    article_type = models.ArticleType.objects.all()
    category = models.Categoery.objects.all()
 
    return render(request,'article.html',{'articles':articles,
                                          'article_type':article_type,
                                         'category':category ,
                                          'kwargs':kwargs})
登入後複製

註:實作此功能並不難,最重要的是理清裡面的思路;首先要確定url訪問路徑格式http://127.0.0.1:8000/article/0-0.html ,第一個0表示article_type字段,第二個0表示category字段,如果為零時,表示搜索此字段全部信息,確認好這個,是成功的第一步,處理文件上有檢索的處理;第二個關鍵點是生成字典search_dict進行相關的搜索,如果是0表示搜尋全部;第三個關鍵點,也是很巧妙的一個方式,把參數kwargs再次傳到前端,簡直神來之筆!

 

2、另一種嘗試(載入記憶體調優)

#由於ArticleType類型是部落格定死的數據,後期不會做變動,可以把資料載入到記憶體當中,加快查詢速度

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .condition a{
            display:inline-block;
            padding: 3px 5px;
            border: 1px solid black;
        }
        .condition a.active{
            background-color: brown;
        }
    </style>
</head>
<body>
    <h2>过滤条件</h2>

    <div>
        {% if kwargs.article_type_id == 0 %}
            <a href="/article/0-{{ kwargs.category_id }}.html">全部</a>
        {% else %}
            <a href="/article/0-{{ kwargs.category_id }}.html">全部</a>
        {% endif %}

        {% for row in article_type%}
            {% if row.0 == kwargs.article_type_id %}
                <a href="/article/{{ row.0 }}-{{ kwargs.category_id }}.html">{{ row.1 }}</a>
            {% else %}
                <a  href="/article/{{ row.0 }}-{{ kwargs.category_id }}.html">{{ row.1 }}</a>
            {% endif %}
        {% endfor %}
    </div>

    <div>
        {% if kwargs.category_id == 0 %}
            <a href="/article/{{ kwargs.article_type_id }}-0.html">全部</a>
        {% else %}
            <a href="/article/{{ kwargs.article_type_id }}-0.html">全部</a>
        {% endif %}

        {% for row in category %}
            {% if row.id == kwargs.category_id %}
                <a href="/article/{{ kwargs.article_type_id }}-{{ row.id }}.html">{{ row.caption }}</a>
            {% else %}
                <a href="/article/{{ kwargs.article_type_id }}-{{ row.id }}.html">{{ row.caption }}</a>
            {% endif %}
        {% endfor %}
    </div>

    <h2>查询结果</h2>
    <ul>
    {% for row in articles %}
        <li>{{ row.id }}-{{ row.title }}------[{{ row.article_type }}]-[{{ row.category.caption }}]</li>
    {% endfor %}
    </ul>
</body>
</html>

article.html
登入後複製
from django.shortcuts import render
from django.shortcuts import HttpResponse

# Create your views here.

def index(request):


    return HttpResponse('Ok')


from . import  models
def article(request,*args,**kwargs):

    search_dict = {}
    for key,value in kwargs.items():
        kwargs[key] = int(value)        # 把字符类型转化为int类型 方便前端做if a == b  这样的比较
        if value !='0':
            search_dict[key] = value
    print(kwargs)
    articles = models.Article.objects.filter(**search_dict) # 字典为空时表示搜索所有

    article_type = models.Article.type_choice

    print(article_type)
    category = models.Categoery.objects.all()

    return render(request,'article.html',{'articles':articles,
                                          'article_type':article_type,
                                         'category':category ,
                                          'kwargs':kwargs})

处理文件.py
登入後複製

資料庫檔案:

from django.db import models
# Create your models here.
class Categoery(models.Model):
    caption = models.CharField(max_length=16)
 
# class ArticleType(models.Model):
#     caption = models.CharField(max_length=16)
 
class Article(models.Model):
    title = models.CharField(max_length=32)
    content = models.CharField(max_length=255)
 
    category = models.ForeignKey(Categoery)
    # article_type = models.ForeignKey(ArticleType)
    type_choice  = [
        (1,'Python'),
        (2,'Linux'),
        (3,'大数据'),
        (4,'架构'),
    ]
    article_type_id = models.IntegerField(choices=type_choice)
登入後複製

3、利用simple_tag把程式碼優化 

關聯檔:

from django.db import models
# Create your models here.
class Categoery(models.Model):
    caption = models.CharField(max_length=16)

class ArticleType(models.Model):
    caption = models.CharField(max_length=16)

class Article(models.Model):
    title = models.CharField(max_length=32)
    content = models.CharField(max_length=255)

    category = models.ForeignKey(Categoery)
    article_type = models.ForeignKey(ArticleType)
    # type_choice  = [
    #     (1,'Python'),
    #     (2,'Linux'),
    #     (3,'大数据'),
    #     (4,'架构'),
    # ]
    # article_type_id = models.IntegerField(choices=type_choice)

数据库文件.py
登入後複製
from django.shortcuts import render
from django.shortcuts import HttpResponse

# Create your views here.

def index(request):


    return HttpResponse('Ok')


from . import models
def article(request, *args, **kwargs):
    search_dict = {}
    for key, value in kwargs.items():
        kwargs[key] = int(value)  # 把字符类型转化为int类型 方便前端做if a == b  这样的比较
        if value != '0':
            search_dict[key] = value
    articles = models.Article.objects.filter(**search_dict)  # 字典为空时表示搜索所有

    article_type = models.ArticleType.objects.all()

    print(article_type)
    category = models.Categoery.objects.all()


    return render(request, 'article.html', {'articles': articles,
                                            'article_type': article_type,
                                            'category': category,
                                            'kwargs': kwargs})

处理文件.py
登入後複製
{% load filter %}
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .condition a{
            display:inline-block;
            padding: 3px 5px;
            border: 1px solid black;
        }
        .condition a.active{
            background-color: brown;
        }
    </style>
</head>
<body>
    <h2>过滤条件</h2>
    <div>
        {% filter_all  kwargs 'article_type'%}

        {% filter_single article_type kwargs 'article_type'%}
    </div>
    <div>
        {% filter_all  kwargs 'category'%}
        {% filter_single category kwargs 'category'%}
    </div>

    <h2>查询结果</h2>
    <ul>
    {% for row in articles %}
        <li>{{ row.id }}-{{ row.title }}------[{{ row.article_type.caption }}]-[{{ row.category.caption }}]</li>
    {% endfor %}
    </ul>
</body>
</html>

article.html
登入後複製

建立templatetags目錄,在目錄下建立filter.py檔:

from django import template
from django.utils.safestring import mark_safe
register = template.Library()
 
@register.simple_tag
def filter_all(kwargs,type_str):
    print(type_str)
    if type_str == 'article_type':
        if kwargs['article_type'] == 0:
            tmp = '<a href = "/article/0-%s.html" class ="active" > 全部 </a>'%(kwargs['category'])
        else:
            tmp = '<a href = "/article/0-%s.html"> 全部 </a>'%(kwargs['category'])
 
    elif type_str == 'category':
        if kwargs['category'] == 0:
            tmp = '<a href = "/article/%s-0.html" class ="active" > 全部 </a>' % (kwargs['article_type'])
        else:
            tmp = '<a href = "/article/%s-0.html"> 全部 </a>' % (kwargs['article_type'])
 
    return mark_safe(tmp)
 
@register.simple_tag()
def filter_single(type_obj,kwargs,type_str):
 
    print(type_str)
    tmp = ''
    if type_str == 'article_type':
        for row in type_obj:
            if row.id == kwargs['article_type']:
                tag = '<a class="active" href="/article/%s-%s.html">%s</a>\n'%(row.id,kwargs['category'],row.caption)
            else:
                tag = '<a href="/article/%s-%s.html">%s</a>\n' % (row.id, kwargs['category'],row.caption)
            tmp +=tag
    elif type_str == 'category':
        for row in type_obj:
            if row.id == kwargs['category']:
                tag = '<a class="active" href="/article/%s-%s.html">%s</a>\n' % (kwargs['article_type'],row.id, row.caption)
            else:
                tag = '<a href="/article/%s-%s.html">%s</a>\n' % (kwargs['article_type'], row.id, row.caption)
            tmp += tag
 
    return mark_safe(tmp)
登入後複製

HTML檔案主體內容:

{% load filter %}
<body>
    <h2>过滤条件</h2>
    <div class="condition">
        {% filter_all  kwargs 'article_type'%}
 
        {% filter_single article_type kwargs 'article_type'%}
    </div>
    <div class="condition">
        {% filter_all  kwargs 'category'%}
        {% filter_single category kwargs 'category'%}
    </div>
 
    <h2>查询结果</h2>
    <ul>
    {% for row in articles %}
        <li>{{ row.id }}-{{ row.title }}------[{{ row.article_type.caption }}]-[{{ row.category.caption }}]</li>
    {% endfor %}
    </ul>
</body>
登入後複製

JSONP

  JSONP(JSON with Padding)是JSON的一種「使用模式”,可用於解決主流瀏覽器的跨域資料存取的問題。由於同源策略,一般來說位於 server1.example.com 的網頁無法與不是 server1.example.com的伺服器溝通,而 HTML 的

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Python開發經驗分享:如何進行版本控制與發布管理 Python開發經驗分享:如何進行版本控制與發布管理 Nov 23, 2023 am 08:36 AM

Python開發經驗分享:如何進行版本控制和發布管理引言:在Python開發過程中,版本控制和發布管理是非常重要的環節。透過版本控制,我們可以輕鬆追蹤程式碼的變更、協同開發、解決衝突等;而發布管理則能夠幫助我們組織程式碼的部署、測試和發布流程,確保程式碼的品質和穩定性。本文將從版本控制和發布管理兩個方面,分享一些Python開發中的經驗和實踐。一、版本控製版本控

Python開發注意事項:避免常見的記憶體洩漏問題 Python開發注意事項:避免常見的記憶體洩漏問題 Nov 22, 2023 pm 01:43 PM

Python作為一種高級程式語言,具有易學易用和開發效率高等優點,在開發人員中越來越受歡迎。但是,由於其垃圾回收機制的實現方式,Python在處理大量記憶體時,容易出現記憶體洩漏問題。本文將從常見記憶體洩漏問題、造成問題的原因以及避免記憶體洩漏的方法三個方面來介紹Python開發過程中需要注意的事項。一、常見記憶體洩漏問題記憶體洩漏是指程式在運作中分配的記憶體空間無法釋放

Python開發建議:掌握並應用物件導向程式設計的原則 Python開發建議:掌握並應用物件導向程式設計的原則 Nov 22, 2023 pm 07:59 PM

Python是一門強大而靈活的程式語言,廣泛應用於各種領域的軟體開發。在Python開發過程中,掌握並應用物件導向程式設計(Object-OrientedProgramming,OOP)的原則是非常重要的。本文將介紹一些關鍵的Python開發建議,幫助開發者更能掌握並應用物件導向程式設計的原則。首先,物件導向程式設計的核心思想是將問題劃分為一系列的對象,並透過對象之

Python開發經驗分享:如何進行程式碼審查和品質保證 Python開發經驗分享:如何進行程式碼審查和品質保證 Nov 22, 2023 am 08:18 AM

Python開發經驗分享:如何進行程式碼審查和品質保證導言:在軟體開發過程中,程式碼審查和品質保證是至關重要的環節。良好的程式碼審查可以提高程式碼品質、減少錯誤和缺陷,提高程式的可維護性和可擴展性。本文將從以下幾個方面分享Python開發中如何進行程式碼審查和品質保證的經驗。一、制定代碼審查規範代碼審查是一種系統性的活動,需要對代碼進行全面的檢查和評估。為了規範代碼審

Python開發更順暢:國內源下的pip安裝教程 Python開發更順暢:國內源下的pip安裝教程 Jan 17, 2024 am 09:54 AM

pip國內源安裝教學:讓你的Python開發更順暢,需要具體程式碼範例在Python開發中,使用pip來管理第三方函式庫是非常常見的。然而,由於眾所周知的原因,有時直接使用官方的pip來源會遇到下載速度慢、無法連線等問題。為了解決這個問題,國內出現了一些優秀的pip國內源,如阿里雲、騰訊雲、豆瓣等。使用這些國內來源,可以大幅提高下載速度,提升Python開發的效率

Python開發建議:合理規劃專案架構與模組劃分 Python開發建議:合理規劃專案架構與模組劃分 Nov 22, 2023 pm 07:52 PM

Python開發是一種簡單而又強大的程式語言,常被用來開發各種類型的應用程式。然而,對於初學者來說,可能會在專案結構和模組劃分方面遇到一些挑戰。一個良好的專案結構和模組劃分不僅有助於提高程式碼的可維護性和可擴展性,還能提升團隊開發的效率。在本文中,我們將分享一些建議,幫助您合理規劃Python專案的結構和模組劃分。首先,一個好的專案結構應能清楚地展示專案的

提高Python開發效率:手把手教你配置國內pip來源 提高Python開發效率:手把手教你配置國內pip來源 Jan 17, 2024 am 10:10 AM

從零開始,一步步教你配置pip國內源,讓你的Python開發更有效率在Python的開發過程中,我們常會用到pip來管理第三方函式庫。然而,由於國內的網路環境問題,使用預設的pip來源往往會導致下載速度緩慢、甚至無法連線的情況。為了讓我們的Python開發更有效率,配置一個國內源是非常必要的。那麼,現在就讓我們一步一步來配置pip國內源吧!首先,我們需要找到pip

Python開發經驗總結:提高程式碼安全性和防禦性的方法 Python開發經驗總結:提高程式碼安全性和防禦性的方法 Nov 23, 2023 am 09:35 AM

Python開發經驗總結:提高程式碼安全性和防禦性的方法隨著網路的發展,程式碼的安全性和防禦性越來越受到關注。特別是Python作為一門廣泛使用的動態語言,也面臨各種潛在的風險。本文將總結一些提高Python程式碼安全性和防禦性的方法,希望對Python開發者有所幫助。合理使用輸入驗證在開發過程中,使用者的輸入可能包含惡意程式碼。為了避免這種情況發生,開發者應該對

See all articles