Python 개발 [Django]: 통합 검색, JSONP, XSS 필터링
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은 카테고리 필드를 나타냅니다. 0이면 이 필드의 모든 정보를 검색한다는 의미입니다. 이를 확인하는 것이 처리 파일에 대한 검색 처리가 있음을 확인하는 것입니다. 관련 검색어에 대한 사전 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에 위치한 웹 페이지는 HTML

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Python 개발 경험 공유: 버전 제어 및 릴리스 관리 수행 방법 소개: Python 개발 프로세스에서 버전 제어 및 릴리스 관리는 매우 중요한 연결 고리입니다. 버전 제어를 통해 코드 변경 사항을 쉽게 추적하고, 개발에 협력하고, 충돌을 해결할 수 있으며, 릴리스 관리는 코드의 품질과 안정성을 보장하기 위해 코드의 배포, 테스트 및 릴리스 프로세스를 구성하는 데 도움이 될 수 있습니다. 이 기사에서는 버전 제어와 릴리스 관리라는 두 가지 측면에서 Python 개발의 몇 가지 경험과 사례를 공유합니다. 1. 버전 관리 버전 관리

고급 프로그래밍 언어인 Python은 배우기 쉽고, 사용하기 쉽고, 개발 효율성이 높다는 장점을 갖고 있으며, 개발자들 사이에서 점점 인기를 얻고 있습니다. 그러나 가비지 수집 메커니즘이 구현되는 방식으로 인해 Python은 많은 양의 메모리를 처리할 때 메모리 누수가 발생하기 쉽습니다. 이 글에서는 일반적인 메모리 누수 문제, 문제의 원인, 메모리 누수를 방지하는 방법이라는 세 가지 측면에서 Python 개발 중에 주의해야 할 사항을 소개합니다. 1. 일반적인 메모리 누수 문제: 메모리 누수는 작업 중에 프로그램이 할당한 메모리 공간을 해제할 수 없는 것을 의미합니다.

Python 개발 경험 공유: 코드 검토 및 품질 보증 수행 방법 소개: 소프트웨어 개발 프로세스에서 코드 검토와 품질 보증은 중요한 연결 고리입니다. 좋은 코드 검토는 코드 품질을 향상시키고 오류와 결함을 줄이며 프로그램 유지 관리성과 확장성을 향상시킬 수 있습니다. 이 기사에서는 다음과 같은 측면에서 Python 개발의 코드 검토 및 품질 보증 경험을 공유합니다. 1. 코드 검토 사양 개발 코드 검토는 코드에 대한 포괄적인 검사와 평가가 필요한 체계적인 활동입니다. 코드 리뷰를 표준화하기 위해

Python은 다양한 분야의 소프트웨어 개발에 널리 사용되는 강력하고 유연한 프로그래밍 언어입니다. Python 개발 과정에서는 객체지향 프로그래밍(OOP)의 원리를 익히고 적용하는 것이 매우 중요합니다. 이 기사에서는 개발자가 객체 지향 프로그래밍의 원칙을 더 잘 이해하고 적용하는 데 도움이 되는 몇 가지 주요 Python 개발 제안을 소개합니다. 우선, 객체지향 프로그래밍의 핵심 아이디어는 문제를 일련의 객체로 나누고,

pip 국내 소스 설치 튜토리얼: Python 개발을 보다 원활하게 하려면 특정 코드 예제가 필요합니다. Python 개발에서는 pip를 사용하여 타사 라이브러리를 관리하는 것이 매우 일반적입니다. 그러나 잘 알려진 이유로 인해 공식 pip 소스를 직접 사용하면 다운로드 속도가 느려지고 연결되지 않는 등의 문제가 발생할 수 있습니다. 이 문제를 해결하기 위해 Alibaba Cloud, Tencent Cloud, Douban 등과 같은 우수한 국내 pip 소스가 중국에서 등장했습니다. 이러한 국내 소스를 사용하면 다운로드 속도가 크게 향상되고 Python 개발 효율성이 향상될 수 있습니다.

Python 개발 과정에서 우리는 종종 pip를 사용하여 타사 라이브러리를 관리하는 경우가 많습니다. 하지만 국내 네트워크 환경의 문제로 인해 기본 pip 소스를 사용하면 다운로드 속도가 느려지거나 연결이 되지 않는 경우가 많습니다. 우리의 파이썬 개발을 보다 효율적으로 하기 위해서는 국내 소스를 구성하는 것이 필요합니다. 이제 pip 국내 소스를 단계별로 구성해 보겠습니다! 먼저 pip를 찾아야 합니다.

Python 개발은 다양한 유형의 애플리케이션을 개발하는 데 자주 사용되는 간단하면서도 강력한 프로그래밍 언어입니다. 하지만 초보자의 경우 프로젝트 구조와 모듈 분할에 어려움이 있을 수 있습니다. 좋은 프로젝트 구조와 모듈 분할은 코드의 유지 관리성과 확장성을 향상시키는 데 도움이 될 뿐만 아니라 팀 개발의 효율성도 향상시킵니다. 이 기사에서는 Python 프로젝트의 구조와 모듈 분할을 올바르게 계획하는 데 도움이 되는 몇 가지 제안 사항을 공유합니다. 우선, 좋은 프로젝트 구조는 프로젝트의 목표를 명확하게 보여줄 수 있어야 합니다.

Python 개발 경험 요약: 코드 보안 및 방어를 개선하는 방법 인터넷이 발전하면서 코드 보안 및 방어가 점점 더 주목을 받고 있습니다. 특히, 널리 사용되는 동적 언어인 Python 역시 다양한 잠재적 위험에 직면해 있습니다. 이 기사에서는 Python 개발자에게 도움이 되기를 바라며 Python 코드의 보안 및 방어를 향상하는 몇 가지 방법을 요약합니다. 입력 유효성 검사의 올바른 사용 개발 과정에서 사용자 입력에 악성 코드가 포함될 수 있습니다. 이런 일이 발생하지 않도록 개발자는 다음을 수행해야 합니다.
