Heim Backend-Entwicklung Python-Tutorial Python-Entwicklung [Django]: kombinierte Suche, JSONP, XSS-Filterung

Python-Entwicklung [Django]: kombinierte Suche, JSONP, XSS-Filterung

Feb 22, 2017 am 10:37 AM
python开发

1. Einfache Implementierung

Zugehörige Dateien:

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
Nach dem Login kopieren
<!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
Nach dem Login kopieren

Datenbankstruktur:

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)
Nach dem Login kopieren

Verarbeitungsdateien:

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})
Nach dem Login kopieren

Hinweis: Es ist nicht schwierig, diese Funktion zu implementieren. Das Wichtigste ist, zunächst das URL-Zugriffspfadformat http://127.0.0.1:8000/article/0-0.html zu bestimmen. Die erste 0 stellt das Feld „article_type“ dar und die zweite 0 stellt das Feld „Kategorie“ dar. Wenn es Null ist, bedeutet dies, dass die Suche nach allen Informationen in diesem Feld der erste Schritt zum Erfolg ist ; der zweite Schlüsselpunkt ist das Generieren des Wörterbuchs search_dict für verwandte Suchen. Wenn es 0 ist, bedeutet dies, dass der dritte Schlüsselpunkt ebenfalls eine sehr clevere Möglichkeit ist, den Parameter kwargs erneut an das Frontend zu übergeben Genius!

2. Ein weiterer Versuch (Ladespeicheroptimierung)

Da der ArticleType-Typ die festen Daten des Blogs ist, wird er später nicht geändert, und die Daten können in den Speicher geladen werden, um die Abfrage zu beschleunigen

<!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
Nach dem Login kopieren
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
Nach dem Login kopieren

Datenbankdatei:

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)
Nach dem Login kopieren

3. Verwenden Sie simple_tag, um den Code zu optimieren

Zugehörige Datei :

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
Nach dem Login kopieren
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
Nach dem Login kopieren
{% 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
Nach dem Login kopieren

Erstellen Sie das Verzeichnis templatetags und erstellen Sie die Datei filter.py im Verzeichnis:

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)
Nach dem Login kopieren

Hauptinhalt der HTML-Datei:

{% 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>
Nach dem Login kopieren

JSONP

JSONP (JSON mit Padding) ist ein „Nutzungsmodus“ von JSON, der verwendet werden kann, um das Problem des domänenübergreifenden Datenzugriffs durch Mainstream-Browser zu lösen. Aufgrund der Same-Origin-Richtlinie können Webseiten, die sich auf server1.example.com befinden, im Allgemeinen nicht mit anderen Servern als server1.example.com kommunizieren, mit Ausnahme des HTML-Elements

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Erfahrungsaustausch in der Python-Entwicklung: So führen Sie Versionskontrolle und Release-Management durch Erfahrungsaustausch in der Python-Entwicklung: So führen Sie Versionskontrolle und Release-Management durch Nov 23, 2023 am 08:36 AM

Erfahrungsaustausch in der Python-Entwicklung: So führen Sie Versionskontrolle und Release-Management durch. Einführung: Im Python-Entwicklungsprozess sind Versionskontrolle und Release-Management sehr wichtige Verbindungen. Durch die Versionskontrolle können wir Codeänderungen leicht verfolgen, bei der Entwicklung zusammenarbeiten, Konflikte lösen usw.; und das Release-Management kann uns dabei helfen, den Bereitstellungs-, Test- und Release-Prozess des Codes zu organisieren, um die Qualität und Stabilität des Codes sicherzustellen. In diesem Artikel werden einige Erfahrungen und Praktiken in der Python-Entwicklung unter zwei Aspekten geteilt: Versionskontrolle und Release-Management. 1. Versionskontrolle Versionskontrolle

Hinweise zur Python-Entwicklung: Vermeiden Sie häufige Probleme mit Speicherverlusten Hinweise zur Python-Entwicklung: Vermeiden Sie häufige Probleme mit Speicherverlusten Nov 22, 2023 pm 01:43 PM

Als Programmiersprache auf hohem Niveau bietet Python die Vorteile, dass es leicht zu erlernen, einfach zu verwenden und äußerst effizient in der Entwicklung ist, und erfreut sich bei Entwicklern immer größerer Beliebtheit. Aufgrund der Art und Weise, wie sein Garbage-Collection-Mechanismus implementiert ist, ist Python jedoch anfällig für Speicherverluste, wenn große Speichermengen verarbeitet werden. In diesem Artikel werden die Dinge vorgestellt, auf die Sie bei der Python-Entwicklung achten müssen, und zwar unter drei Aspekten: häufige Speicherverlustprobleme, Problemursachen und Methoden zur Vermeidung von Speicherverlusten. 1. Häufige Speicherleckprobleme: Speicherlecks beziehen sich auf die Unfähigkeit, den vom Programm während des Betriebs zugewiesenen Speicherplatz freizugeben.

Ratschläge zur Python-Entwicklung: Beherrschen und wenden Sie die Prinzipien der objektorientierten Programmierung an Ratschläge zur Python-Entwicklung: Beherrschen und wenden Sie die Prinzipien der objektorientierten Programmierung an Nov 22, 2023 pm 07:59 PM

Python ist eine leistungsstarke und flexible Programmiersprache, die in der Softwareentwicklung in verschiedenen Bereichen weit verbreitet ist. Im Python-Entwicklungsprozess ist es sehr wichtig, die Prinzipien der objektorientierten Programmierung (OOP) zu beherrschen und anzuwenden. In diesem Artikel werden einige wichtige Vorschläge für die Python-Entwicklung vorgestellt, um Entwicklern zu helfen, die Prinzipien der objektorientierten Programmierung besser zu verstehen und anzuwenden. Die Kernidee der objektorientierten Programmierung besteht zunächst darin, das Problem in eine Reihe von Objekten zu unterteilen

Erfahrungsaustausch in der Python-Entwicklung: So führen Sie eine Codeüberprüfung und Qualitätssicherung durch Erfahrungsaustausch in der Python-Entwicklung: So führen Sie eine Codeüberprüfung und Qualitätssicherung durch Nov 22, 2023 am 08:18 AM

Erfahrungsaustausch in der Python-Entwicklung: So führen Sie eine Codeüberprüfung und Qualitätssicherung durch. Einführung: Im Softwareentwicklungsprozess sind Codeüberprüfung und Qualitätssicherung wichtige Verbindungen. Eine gute Codeüberprüfung kann die Codequalität verbessern, Fehler und Mängel reduzieren sowie die Wartbarkeit und Skalierbarkeit von Programmen verbessern. In diesem Artikel werden die Erfahrungen der Codeüberprüfung und Qualitätssicherung in der Python-Entwicklung unter folgenden Aspekten geteilt. 1. Code-Review-Spezifikationen entwickeln Code-Review ist eine systematische Aktivität, die eine umfassende Inspektion und Bewertung des Codes erfordert. Um die Codeüberprüfung zu standardisieren

Ratschläge zur Python-Entwicklung: Projektstruktur und Modulaufteilung richtig planen Ratschläge zur Python-Entwicklung: Projektstruktur und Modulaufteilung richtig planen Nov 22, 2023 pm 07:52 PM

Python-Entwicklung ist eine einfache, aber leistungsstarke Programmiersprache, die häufig zur Entwicklung verschiedener Arten von Anwendungen verwendet wird. Für Einsteiger kann es jedoch zu einigen Herausforderungen bei der Projektstruktur und der Modulaufteilung kommen. Eine gute Projektstruktur und Modulaufteilung trägt nicht nur dazu bei, die Wartbarkeit und Skalierbarkeit des Codes zu verbessern, sondern steigert auch die Effizienz der Teamentwicklung. In diesem Artikel geben wir einige Vorschläge, die Ihnen dabei helfen sollen, die Struktur und Modulaufteilung Ihres Python-Projekts richtig zu planen. Zunächst einmal sollte eine gute Projektstruktur in der Lage sein, die Ziele des Projekts klar darzustellen

Die Python-Entwicklung ist reibungsloser: Pip-Installations-Tutorial aus inländischen Quellen Die Python-Entwicklung ist reibungsloser: Pip-Installations-Tutorial aus inländischen Quellen Jan 17, 2024 am 09:54 AM

Tutorial zur Installation von pip-Inlandsquellen: Um Ihre Python-Entwicklung reibungsloser zu gestalten, sind spezifische Codebeispiele erforderlich. In der Python-Entwicklung wird häufig pip zum Verwalten von Bibliotheken von Drittanbietern verwendet. Aus bekannten Gründen kann es jedoch bei der direkten Verwendung der offiziellen Pip-Quelle manchmal zu Problemen wie langsamer Download-Geschwindigkeit und fehlender Verbindungsmöglichkeit kommen. Um dieses Problem zu lösen, sind in China einige hervorragende inländische Pip-Quellen entstanden, wie Alibaba Cloud, Tencent Cloud, Douban usw. Die Verwendung dieser inländischen Quellen kann die Download-Geschwindigkeit erheblich verbessern und die Effizienz der Python-Entwicklung verbessern.

Verbessern Sie die Effizienz der Python-Entwicklung: Erfahren Sie Schritt für Schritt, wie Sie inländische Pip-Quellen konfigurieren Verbessern Sie die Effizienz der Python-Entwicklung: Erfahren Sie Schritt für Schritt, wie Sie inländische Pip-Quellen konfigurieren Jan 17, 2024 am 10:10 AM

Von Grund auf zeigen wir Ihnen Schritt für Schritt, wie Sie die inländische Quelle von Pip konfigurieren, um Ihre Python-Entwicklung effizienter zu gestalten. Während des Entwicklungsprozesses von Python verwenden wir häufig Pip, um Bibliotheken von Drittanbietern zu verwalten. Aufgrund von Problemen in der heimischen Netzwerkumgebung führt die Verwendung der Standard-PIP-Quelle jedoch häufig zu langsamen Download-Geschwindigkeiten oder sogar zu Verbindungsproblemen. Um unsere Python-Entwicklung effizienter zu gestalten, ist es notwendig, eine inländische Quelle zu konfigurieren. Lassen Sie uns nun Schritt für Schritt die Pip-Inlandsquelle konfigurieren! Zuerst müssen wir Pip finden

Zusammenfassung der Python-Entwicklungserfahrung: Methoden zur Verbesserung der Codesicherheit und -verteidigung Zusammenfassung der Python-Entwicklungserfahrung: Methoden zur Verbesserung der Codesicherheit und -verteidigung Nov 23, 2023 am 09:35 AM

Zusammenfassung der Python-Entwicklungserfahrung: Methoden zur Verbesserung der Codesicherheit und -verteidigung Mit der Entwicklung des Internets haben Codesicherheit und -verteidigung immer mehr Aufmerksamkeit auf sich gezogen. Insbesondere Python ist als weit verbreitete dynamische Sprache auch verschiedenen potenziellen Risiken ausgesetzt. In diesem Artikel werden einige Methoden zur Verbesserung der Sicherheit und Verteidigung von Python-Code zusammengefasst, in der Hoffnung, für Python-Entwickler hilfreich zu sein. Korrekte Verwendung der Eingabevalidierung Während des Entwicklungsprozesses können Benutzereingaben schädlichen Code enthalten. Um dies zu verhindern, sollten Entwickler dies tun

See all articles