


Python-Entwicklung [Django]: kombinierte Suche, JSONP, XSS-Filterung
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
<!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
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)
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})
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
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
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)
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
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
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)
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>
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
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



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

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.

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. 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

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

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.

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 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
