Rumah pembangunan bahagian belakang Tutorial Python Python开发【Django】:组合搜索、JSONP、XSS过滤

Python开发【Django】:组合搜索、JSONP、XSS过滤

Feb 22, 2017 am 10:37 AM
pembangunan ular sawa

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
Salin selepas log masuk
<!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
Salin selepas log masuk

数据库结构:

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)
Salin selepas log masuk

处理文件:

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})
Salin selepas log masuk

注:实现此功能并不难,最重要的是理清里面的思路;首先先要确定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
Salin selepas log masuk
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
Salin selepas log masuk

数据库文件:

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)
Salin selepas log masuk

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
Salin selepas log masuk
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
Salin selepas log masuk
{% 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
Salin selepas log masuk

创建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)
Salin selepas log masuk

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>
Salin selepas log masuk

JSONP

  JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Perkongsian pengalaman pembangunan Python: cara melaksanakan kawalan versi dan pengurusan keluaran Perkongsian pengalaman pembangunan Python: cara melaksanakan kawalan versi dan pengurusan keluaran Nov 23, 2023 am 08:36 AM

Perkongsian pengalaman pembangunan Python: Cara menjalankan kawalan versi dan pengurusan keluaran Pengenalan: Dalam proses pembangunan Python, kawalan versi dan pengurusan keluaran adalah pautan yang sangat penting. Melalui kawalan versi, kami boleh menjejaki perubahan kod dengan mudah, bekerjasama dalam pembangunan, menyelesaikan konflik, dsb. dan pengurusan keluaran boleh membantu kami mengatur proses penempatan, ujian dan pelepasan kod untuk memastikan kualiti dan kestabilan kod. Artikel ini akan berkongsi beberapa pengalaman dan amalan dalam pembangunan Python dari dua aspek: kawalan versi dan pengurusan keluaran. 1. Kawalan versi kawalan versi

Nota Pembangunan Python: Elakkan Masalah Kebocoran Memori Biasa Nota Pembangunan Python: Elakkan Masalah Kebocoran Memori Biasa Nov 22, 2023 pm 01:43 PM

Sebagai bahasa pengaturcaraan peringkat tinggi, Python mempunyai kelebihan kerana mudah dipelajari, mudah digunakan dan sangat cekap dalam pembangunan, dan menjadi semakin popular di kalangan pembangun. Walau bagaimanapun, disebabkan oleh cara mekanisme pengumpulan sampahnya dilaksanakan, Python terdedah kepada kebocoran memori apabila berurusan dengan jumlah memori yang besar. Artikel ini akan memperkenalkan perkara yang perlu anda perhatikan semasa pembangunan Python daripada tiga aspek: masalah kebocoran memori biasa, punca masalah dan kaedah untuk mengelakkan kebocoran memori. 1. Masalah kebocoran memori biasa: Kebocoran memori merujuk kepada ketidakupayaan untuk melepaskan ruang memori yang diperuntukkan oleh program semasa operasi.

Perkongsian pengalaman pembangunan Python: cara menjalankan semakan kod dan jaminan kualiti Perkongsian pengalaman pembangunan Python: cara menjalankan semakan kod dan jaminan kualiti Nov 22, 2023 am 08:18 AM

Perkongsian pengalaman pembangunan Python: Cara menjalankan semakan kod dan jaminan kualiti Pengenalan: Dalam proses pembangunan perisian, semakan kod dan jaminan kualiti adalah pautan penting. Semakan kod yang baik boleh meningkatkan kualiti kod, mengurangkan ralat dan kecacatan serta meningkatkan kebolehselenggaraan dan skalabiliti program. Artikel ini akan berkongsi pengalaman semakan kod dan jaminan kualiti dalam pembangunan Python dari aspek berikut. 1. Membangunkan spesifikasi semakan kod Semakan kod ialah aktiviti sistematik yang memerlukan pemeriksaan dan penilaian menyeluruh terhadap kod. Untuk menyeragamkan semakan kod

Nasihat pembangunan Python: Kuasai dan gunakan prinsip pengaturcaraan berorientasikan objek Nasihat pembangunan Python: Kuasai dan gunakan prinsip pengaturcaraan berorientasikan objek Nov 22, 2023 pm 07:59 PM

Python ialah bahasa pengaturcaraan yang berkuasa dan fleksibel yang digunakan secara meluas dalam pembangunan perisian dalam pelbagai bidang. Dalam proses pembangunan Python, adalah sangat penting untuk menguasai dan menggunakan prinsip Pengaturcaraan Berorientasikan Objek (OOP). Artikel ini akan memperkenalkan beberapa cadangan pembangunan Python utama untuk membantu pembangun memahami dan menggunakan prinsip pengaturcaraan berorientasikan objek dengan lebih baik. Pertama sekali, idea teras pengaturcaraan berorientasikan objek adalah untuk membahagikan masalah kepada satu siri objek dan

Pembangunan Python lebih lancar: tutorial pemasangan pip dari sumber domestik Pembangunan Python lebih lancar: tutorial pemasangan pip dari sumber domestik Jan 17, 2024 am 09:54 AM

pip Tutorial Pemasangan Sumber Domestik: Untuk menjadikan pembangunan Python anda lebih lancar, contoh kod khusus diperlukan Dalam pembangunan Python, adalah perkara biasa untuk menggunakan pip untuk mengurus perpustakaan pihak ketiga. Walau bagaimanapun, atas sebab yang diketahui, kadangkala menggunakan sumber pip rasmi secara langsung akan menghadapi masalah seperti kelajuan muat turun yang perlahan dan ketidakupayaan untuk menyambung. Untuk menyelesaikan masalah ini, beberapa sumber pip domestik yang sangat baik telah muncul di China, seperti Alibaba Cloud, Tencent Cloud, Douban, dll. Menggunakan sumber domestik ini boleh meningkatkan kelajuan muat turun dan meningkatkan kecekapan pembangunan Python.

Tingkatkan kecekapan pembangunan Python: ajar anda langkah demi langkah cara mengkonfigurasi sumber pip domestik Tingkatkan kecekapan pembangunan Python: ajar anda langkah demi langkah cara mengkonfigurasi sumber pip domestik Jan 17, 2024 am 10:10 AM

Bermula dari awal, kami akan mengajar anda langkah demi langkah cara mengkonfigurasi sumber domestik pip untuk menjadikan pembangunan Python anda lebih cekap Semasa proses pembangunan Python, kami sering menggunakan pip untuk mengurus perpustakaan pihak ketiga. Walau bagaimanapun, disebabkan masalah persekitaran rangkaian domestik, menggunakan sumber pip lalai sering mengakibatkan kelajuan muat turun yang perlahan atau bahkan ketidakupayaan untuk menyambung. Untuk menjadikan pembangunan Python kami lebih cekap, adalah perlu untuk mengkonfigurasi sumber domestik. Jadi, mari kita sekarang mengkonfigurasi sumber domestik pip langkah demi langkah! Pertama, kita perlu mencari pip

Cadangan pembangunan Python: Perancangan munasabah struktur projek dan pembahagian modul Cadangan pembangunan Python: Perancangan munasabah struktur projek dan pembahagian modul Nov 22, 2023 pm 07:52 PM

Pembangunan Python ialah bahasa pengaturcaraan yang mudah tetapi berkuasa yang sering digunakan untuk membangunkan pelbagai jenis aplikasi. Walau bagaimanapun, bagi pemula, mungkin terdapat beberapa cabaran dalam struktur projek dan pembahagian modul. Struktur projek dan pembahagian modul yang baik bukan sahaja membantu meningkatkan kebolehselenggaraan dan kebolehskalaan kod, tetapi juga meningkatkan kecekapan pembangunan pasukan. Dalam artikel ini, kami akan berkongsi beberapa cadangan untuk membantu anda merancang dengan betul struktur dan pembahagian modul projek Python anda. Pertama sekali, struktur projek yang baik harus dapat menunjukkan dengan jelas projek itu

Ringkasan pengalaman pembangunan Python: kaedah untuk meningkatkan keselamatan dan pertahanan kod Ringkasan pengalaman pembangunan Python: kaedah untuk meningkatkan keselamatan dan pertahanan kod Nov 23, 2023 am 09:35 AM

Ringkasan pengalaman pembangunan Python: Kaedah untuk meningkatkan keselamatan dan pertahanan kod Dengan pembangunan Internet, keselamatan dan pertahanan kod telah menarik lebih banyak perhatian. Khususnya, Python, sebagai bahasa dinamik yang digunakan secara meluas, juga menghadapi pelbagai potensi risiko. Artikel ini akan meringkaskan beberapa kaedah untuk meningkatkan keselamatan dan pertahanan kod Python, dengan harapan dapat membantu pembangun Python. Penggunaan pengesahan input yang betul Semasa proses pembangunan, input pengguna mungkin mengandungi kod berniat jahat. Untuk mengelakkan perkara ini daripada berlaku, pemaju harus

See all articles