Maison  >  Article  >  développement back-end  >  Développement Python [Django] : recherche combinée, JSONP, filtrage XSS

Développement Python [Django] : recherche combinée, JSONP, filtrage XSS

高洛峰
高洛峰original
2017-02-22 10:37:522000parcourir

1. Implémentation simple

Fichiers associés :

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

urlpatterns = [
    url(r'^index.html/$',views.index),
    url(r'^article/(?P47cf9185b9d6e565a16a5b103ea64946\d+)-(?Pc58a1130350e5f417b7f5c3a9765ab7e\d+).html/$',views.article)
]

url.py
76c82f278ac045591c9159d381de2c57
100db36a723c770d327fc0aef2ce13b1
93f0f5c25f18dab9d176bd4f6de5d30e
    a80eb7cbb6fff8b0ff70bae37074b813
    b2386ffb911b14667cb8f0f91ea547a7Title6e916e0f7d1e588d4f442bf645aedb2f
    c9ccee2e6ea535a969eb3f532ad9fe89
        .condition a{
            display:inline-block;
            padding: 3px 5px;
            border: 1px solid black;
        }
        .condition a.active{
            background-color: brown;
        }
    531ac245ce3e4fe3d50054a55f265927
9c3bca370b5104690d9ef395f2c5f8d1
6c04bd5ca3fcae76e30b72ad730ca86d
    c1a436a314ed609750bd7c7d319db4da过滤条件2e9b454fa8428549ca2e64dfac4625cd


    dc6dce4a544fdca2df29d5ac0ea9906b
        {% if kwargs.article_type == 0 %}
            c1650df1bf28ebb320e3f06f028cceca全部5db79b134e9f6b82c0b36e0489ee08ed
        {% else %}
            c1650df1bf28ebb320e3f06f028cceca全部5db79b134e9f6b82c0b36e0489ee08ed
        {% endif %}

        {% for row in article_type %}
            {% if row.id == kwargs.article_type %}
                8fc2ca070d67d215118cea57248d5115{{ row.caption }}5db79b134e9f6b82c0b36e0489ee08ed
            {% else %}
                f1c526059e6dca0aec95c389326630c2{{ row.caption }}5db79b134e9f6b82c0b36e0489ee08ed
            {% endif %}
        {% endfor %}
    16b28748ea4df4d9c2150843fecfba68

    dc6dce4a544fdca2df29d5ac0ea9906b
        {% if kwargs.category == 0 %}
            df70f7b565cfeab50f6266d13e7aae74全部5db79b134e9f6b82c0b36e0489ee08ed
        {% else %}
            df70f7b565cfeab50f6266d13e7aae74全部5db79b134e9f6b82c0b36e0489ee08ed
        {% endif %}

        {% for row in category %}
            {% if row.id == kwargs.category %}
                c5fdd0f19c8a956b13936b2ed0f418f2{{ row.caption }}5db79b134e9f6b82c0b36e0489ee08ed
            {% else %}
                c5fdd0f19c8a956b13936b2ed0f418f2{{ row.caption }}5db79b134e9f6b82c0b36e0489ee08ed
            {% endif %}
        {% endfor %}
    16b28748ea4df4d9c2150843fecfba68

    c1a436a314ed609750bd7c7d319db4da查询结果2e9b454fa8428549ca2e64dfac4625cd
    ff6d136ddc5fdfeffaf53ff6ee95f185
    {% for row in articles %}
        25edfb22a4f469ecb59f1190150159c6{{ row.id }}-{{ row.title }}------[{{ row.article_type.caption }}]-[{{ row.category.caption }}]bed06894275b65c1ab86501b08a632eb
    {% endfor %}
    929d1f5ca49e04fdcb27f9465b944689
36cc49f0c466276486e50c850b7e4956
73a6ac4ed44ffec12cee46588e518a5e

article.html

Structure de la base de données :

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)

Fichiers de traitement :

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

Remarque : il n'est pas difficile d'implémenter cette fonction. Le plus important est de clarifier d'abord les idées à l'intérieur, de déterminer le format du chemin d'accès à l'url http://127.0.0.1:8000/article/0-0.html, le premier 0 représente le champ article_type et le second 0 représente le champ catégorie. S'il est nul, cela signifie que la recherche de toutes les informations dans ce champ est la première étape vers le succès. ; le deuxième point clé est de générer le dictionnaire search_dict pour effectuer des recherches associées. S'il est égal à 0, cela signifie que tout rechercher est également un moyen très intelligent de transmettre à nouveau le paramètre kwargs au front-end. de génie !

2. Une autre tentative (chargement du réglage de la mémoire)

Étant donné que le type ArticleType est une donnée fixe pour le blog, il ne sera pas modifié à l'avenir. les données en mémoire pour accélérer la requête

76c82f278ac045591c9159d381de2c57
100db36a723c770d327fc0aef2ce13b1
93f0f5c25f18dab9d176bd4f6de5d30e
    a80eb7cbb6fff8b0ff70bae37074b813
    b2386ffb911b14667cb8f0f91ea547a7Title6e916e0f7d1e588d4f442bf645aedb2f
    c9ccee2e6ea535a969eb3f532ad9fe89
        .condition a{
            display:inline-block;
            padding: 3px 5px;
            border: 1px solid black;
        }
        .condition a.active{
            background-color: brown;
        }
    531ac245ce3e4fe3d50054a55f265927
9c3bca370b5104690d9ef395f2c5f8d1
6c04bd5ca3fcae76e30b72ad730ca86d
    c1a436a314ed609750bd7c7d319db4da过滤条件2e9b454fa8428549ca2e64dfac4625cd

    dc6dce4a544fdca2df29d5ac0ea9906b
        {% if kwargs.article_type_id == 0 %}
            9d54c0841deaf5461b945d32b7fb4fdc全部5db79b134e9f6b82c0b36e0489ee08ed
        {% else %}
            9d54c0841deaf5461b945d32b7fb4fdc全部5db79b134e9f6b82c0b36e0489ee08ed
        {% endif %}

        {% for row in article_type%}
            {% if row.0 == kwargs.article_type_id %}
                10f3f6439facab4314cfbe4e3175876d{{ row.1 }}5db79b134e9f6b82c0b36e0489ee08ed
            {% else %}
                a20c8a20660a4e1f867202ed670ff3b0{{ row.1 }}5db79b134e9f6b82c0b36e0489ee08ed
            {% endif %}
        {% endfor %}
    16b28748ea4df4d9c2150843fecfba68

    dc6dce4a544fdca2df29d5ac0ea9906b
        {% if kwargs.category_id == 0 %}
            73f255b70dccd9c638775a7513655ec1全部5db79b134e9f6b82c0b36e0489ee08ed
        {% else %}
            73f255b70dccd9c638775a7513655ec1全部5db79b134e9f6b82c0b36e0489ee08ed
        {% endif %}

        {% for row in category %}
            {% if row.id == kwargs.category_id %}
                51842ade3c1731ef36f6a85f509e3264{{ row.caption }}5db79b134e9f6b82c0b36e0489ee08ed
            {% else %}
                51842ade3c1731ef36f6a85f509e3264{{ row.caption }}5db79b134e9f6b82c0b36e0489ee08ed
            {% endif %}
        {% endfor %}
    16b28748ea4df4d9c2150843fecfba68

    c1a436a314ed609750bd7c7d319db4da查询结果2e9b454fa8428549ca2e64dfac4625cd
    ff6d136ddc5fdfeffaf53ff6ee95f185
    {% for row in articles %}
        25edfb22a4f469ecb59f1190150159c6{{ row.id }}-{{ row.title }}------[{{ row.article_type }}]-[{{ row.category.caption }}]bed06894275b65c1ab86501b08a632eb
    {% endfor %}
    929d1f5ca49e04fdcb27f9465b944689
36cc49f0c466276486e50c850b7e4956
73a6ac4ed44ffec12cee46588e518a5e

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

Fichier de base de données :

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. Utilisez simple_tag pour optimiser le code

Fichier associé. :

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 %}
76c82f278ac045591c9159d381de2c57
100db36a723c770d327fc0aef2ce13b1
93f0f5c25f18dab9d176bd4f6de5d30e
    a80eb7cbb6fff8b0ff70bae37074b813
    b2386ffb911b14667cb8f0f91ea547a7Title6e916e0f7d1e588d4f442bf645aedb2f
    c9ccee2e6ea535a969eb3f532ad9fe89
        .condition a{
            display:inline-block;
            padding: 3px 5px;
            border: 1px solid black;
        }
        .condition a.active{
            background-color: brown;
        }
    531ac245ce3e4fe3d50054a55f265927
9c3bca370b5104690d9ef395f2c5f8d1
6c04bd5ca3fcae76e30b72ad730ca86d
    c1a436a314ed609750bd7c7d319db4da过滤条件2e9b454fa8428549ca2e64dfac4625cd
    dc6dce4a544fdca2df29d5ac0ea9906b
        {% filter_all  kwargs 'article_type'%}

        {% filter_single article_type kwargs 'article_type'%}
    16b28748ea4df4d9c2150843fecfba68
    dc6dce4a544fdca2df29d5ac0ea9906b
        {% filter_all  kwargs 'category'%}
        {% filter_single category kwargs 'category'%}
    16b28748ea4df4d9c2150843fecfba68

    c1a436a314ed609750bd7c7d319db4da查询结果2e9b454fa8428549ca2e64dfac4625cd
    ff6d136ddc5fdfeffaf53ff6ee95f185
    {% for row in articles %}
        25edfb22a4f469ecb59f1190150159c6{{ row.id }}-{{ row.title }}------[{{ row.article_type.caption }}]-[{{ row.category.caption }}]bed06894275b65c1ab86501b08a632eb
    {% endfor %}
    929d1f5ca49e04fdcb27f9465b944689
36cc49f0c466276486e50c850b7e4956
73a6ac4ed44ffec12cee46588e518a5e

article.html

Créez le répertoire templatetags et créez le fichier filter.py dans le répertoire :

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 = 'd0bc4868ae1f1ff1c94f379d51d89899 全部 5db79b134e9f6b82c0b36e0489ee08ed'%(kwargs['category'])
        else:
            tmp = '5b4a38184beb11dcff07b41757a60e18 全部 5db79b134e9f6b82c0b36e0489ee08ed'%(kwargs['category'])
 
    elif type_str == 'category':
        if kwargs['category'] == 0:
            tmp = '53ffd3320390aae5c9a1b7577e83bd73 全部 5db79b134e9f6b82c0b36e0489ee08ed' % (kwargs['article_type'])
        else:
            tmp = 'ea4c005b7a5cd7a87c1b4bb223203114 全部 5db79b134e9f6b82c0b36e0489ee08ed' % (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 = '9dba6e1a712676182e9928b187d05ff4%s5db79b134e9f6b82c0b36e0489ee08ed\n'%(row.id,kwargs['category'],row.caption)
            else:
                tag = 'd6329b2a69cc11866deec56d01dda4a9%s5db79b134e9f6b82c0b36e0489ee08ed\n' % (row.id, kwargs['category'],row.caption)
            tmp +=tag
    elif type_str == 'category':
        for row in type_obj:
            if row.id == kwargs['category']:
                tag = '9dba6e1a712676182e9928b187d05ff4%s5db79b134e9f6b82c0b36e0489ee08ed\n' % (kwargs['article_type'],row.id, row.caption)
            else:
                tag = 'd6329b2a69cc11866deec56d01dda4a9%s5db79b134e9f6b82c0b36e0489ee08ed\n' % (kwargs['article_type'], row.id, row.caption)
            tmp += tag
 
    return mark_safe(tmp)

Contenu principal du fichier HTML :

{% load filter %}
6c04bd5ca3fcae76e30b72ad730ca86d
    c1a436a314ed609750bd7c7d319db4da过滤条件2e9b454fa8428549ca2e64dfac4625cd
    4981d39361bc2844bf84fbb6c43c223d
        {% filter_all  kwargs 'article_type'%}
 
        {% filter_single article_type kwargs 'article_type'%}
    16b28748ea4df4d9c2150843fecfba68
    4981d39361bc2844bf84fbb6c43c223d
        {% filter_all  kwargs 'category'%}
        {% filter_single category kwargs 'category'%}
    16b28748ea4df4d9c2150843fecfba68
 
    c1a436a314ed609750bd7c7d319db4da查询结果2e9b454fa8428549ca2e64dfac4625cd
    ff6d136ddc5fdfeffaf53ff6ee95f185
    {% for row in articles %}
        25edfb22a4f469ecb59f1190150159c6{{ row.id }}-{{ row.title }}------[{{ row.article_type.caption }}]-[{{ row.category.caption }}]bed06894275b65c1ab86501b08a632eb
    {% endfor %}
    929d1f5ca49e04fdcb27f9465b944689
36cc49f0c466276486e50c850b7e4956

JSONP

JSONP (JSON with Padding) est un « mode d'utilisation » de JSON qui peut être utilisé pour résoudre le problème de l'accès aux données inter-domaines par les navigateurs grand public. En raison de la politique de même origine, de manière générale, les pages Web situées sur server1.example.com ne peuvent pas communiquer avec des serveurs autres que server1.example.com, à l'exception de l'élément HTML 3f1c4e4b6b16bbbd69b2ee476dc4f83a Grâce à cette politique ouverte de l'élément 3f1c4e4b6b16bbbd69b2ee476dc4f83a, les pages Web peuvent obtenir des données JSON générées dynamiquement à partir d'autres sources, et ce modèle d'utilisation est appelé JSONP. Les données capturées avec JSONP ne sont pas du JSON, mais du JavaScript arbitraire, qui est exécuté avec un interpréteur JavaScript au lieu d'être analysé avec un analyseur JSON.

Principe :

- Créer une balise de script

- src=adresse distante

- Les données renvoyées doivent être au format js

- Seules les requêtes GET peuvent être envoyées

1. Quelle est la politique de même origine ?

Traitement des fichiers :

import requests
def jsonp(request):
    # 获取url信息
    response = requests.get('http://weatherapi.market.xiaomi.com/wtr-v2/weather?cityId=101121301')
    response.encoding = 'utf-8'     # 进行编码
 
    return render(request,'jsonp.html',{'result':response.text})  # response.text 请求内容

Fichiers HTML :

<body>
    <h1>后台获取的结果</h1>
    {{ result }}
    <h1>js直接获取结果</h1>
    <input type="button" value="获取数据" onclick="getContent();" />
    <div id="container"></div>
    <script src="/static/jquery-1.8.2.js"></script>
    <script>
        function getContent() {
            var xhr = new XMLHttpRequest();         // 创建对象
            xhr.open(&#39;GET&#39;, &#39;http://weatherapi.market.xiaomi.com/wtr-v2/weather?cityId=101121301&#39;); // GET方式打开
            xhr.onreadystatechange = function () {  // 收到返回值时执行
                console.log(xhr.responseText);
            };
            xhr.send()  // 发送
        }
    </script>
</body>

Remarque : Lorsque vous cliquez sur js pour obtenir directement les résultats, le navigateur affiche le message d'erreur suivant, car le navigateur uniquement Il accepte les informations envoyées par http://127.0.0.1:8000, mais bloque directement les informations envoyées par le site météo. Il s'agit de la politique de même origine. Existe-t-il un moyen de résoudre ce problème ?

XMLHttpRequest cannot load http://weatherapi.market.xiaomi.com/wtr-v2/weather?cityId=101121301. No &#39;Access-Control-Allow-Origin&#39; header is present on the requested resource. Origin &#39;http://127.0.0.1:8000&#39; is therefore not allowed access.

2. Utilisez habilement l'attribut src de la balise script

La balise script n'est pas affectée par la politique de même origine

Traitement des fichiers :

import requests
def jsonp(request):
    # 获取url信息
    response = requests.get(&#39;http://weatherapi.market.xiaomi.com/wtr-v2/weather?cityId=101121301&#39;)
    response.encoding = &#39;utf-8&#39;     # 进行编码
 
    return render(request,&#39;jsonp.html&#39;,{&#39;result&#39;:response.text})  # response.text 请求内容
 
def jsonp_api(request):
    return HttpResponse('alert(123)')

Fichier HTML :

<body>
    <h1>后台获取的结果</h1>
    {{ result }}
    <h1>js直接获取结果</h1>
    <input type="button" value="获取数据" onclick="getContent();" />
    <div id="container"></div>
    <script>
        function getContent() {
            var tag = document.createElement(&#39;script&#39;);
            tag.src = &#39;/jsonp_api.html&#39;;
            document.head.appendChild(tag);
         //   document.head.removeChild(tag);
        }
    </script>
</body>

Remarque : Pour plus de commodité lors des requêtes js, l'URL actuelle du programme est toujours demandé ; après avoir exécuté le code ci-dessus Vous trouverez une situation magique, la page affichera 123 informations, indiquant que le script a réussi à obtenir les informations

3. Modifiez légèrement le recto et back end pour rendre l'utilisation plus dynamique

Fichier de traitement :

def jsonp(request):
 
    return render(request,&#39;jsonp.html&#39;)  # response.text 请求内容
 
def jsonp_api(request):
    func = request.GET.get(&#39;callback&#39;)  # 获取用户callback参数
    content = &#39;%s(10000)&#39;%func          # 执行func(10000)函数
 
    return HttpResponse(content)

Fichier HTML :

<body>
    <h1>后台获取的结果</h1>
    {{ result }}
    <h1>js直接获取结果</h1>
    <input type="button" value="获取数据" onclick="getContent();" />
    <div id="container"></div>
    <script>
        function getContent() {
            var tag = document.createElement(&#39;script&#39;);
            tag.src = &#39;/jsonp_api.html?callback=list&#39;;  // 自定义callback参数,与后台达成默契
            document.head.appendChild(tag);
         //   document.head.removeChild(tag);
        }
        function list(arg){         // 自定义函数与callback=list相对应
               alert(arg);
            }
    </script>
</body>

Remarque : Lorsque js envoie une requête, apportez le paramètre de rappel , puis définissez la méthode correspondant au paramètre, et l'arrière-plan transmettra les données dans cette méthode et l'exécutera quant à l'impression ou à la fenêtre contextuelle, cela dépend des propres besoins de l'utilisateur et du processus de mise en œuvre de jsonp ; l'implémentation du code ci-dessus

4. Exemple d'application ajax

traitant des fichiers :

import requests
def jsonp(request):
    response = requests.get(&#39;http://www.jxntv.cn/data/jmd-jxtv2.html?callback=list&_=1454376870403&#39;)
    response.encoding = &#39;utf-8&#39;  # 进行编码
 
    return render(request, &#39;jsonp.html&#39;, {&#39;result&#39;: response.text})  # response.text 请求内容

Fichiers HTML :

<body>
    <h1>后台获取的结果</h1>
    {{ result }}
    <h1>js直接获取结果</h1>
    <input type="button" value="获取数据" onclick="getContent();" />
    <div id="container"></div>
    <script src="/static/jquery-1.8.2.js"></script>
    <script>
        function getContent() {
            $.ajax({
                url: &#39;http://www.jxntv.cn/data/jmd-jxtv2.html?callback=list&_=1454376870403&#39;,
                type: &#39;POST&#39;,
                dataType: &#39;jsonp&#39;,     // 即使写的type是POST也是按照GET请求发送
                jsonp: &#39;callback&#39;,
                jsonpCallback: &#39;list&#39;
            });
        }
 
        function list(arg){         // 自定义函数与callback=list相对应
            console.log(arg);
            var data = arg[&#39;data&#39;];
            for(k in data){
                var tr = document.createElement(&#39;td&#39;);
                var week = data[k][&#39;week&#39;];
                var list = data[k][&#39;list&#39;];
                tr.textContent =week
                document.body.appendChild(tr);
                console.log(week);
                for(i in list){
                    var name = list[i][&#39;name&#39;];
                    console.log(name)
        }}}
    </script>
</body>
list({data:[ { "week":"周日", "list":[ { "time":"0030", "name":"通宵剧场六集连播", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0530", "name":"《都市现场》60分钟精编版(重播)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0630", "name":"《快乐生活一点通》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0700", "name":"《e早晨报》60分钟直播版块", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0800", "name":"精选剧场四集连播", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1120", "name":"《地宝当家》(重播)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1200", "name":"《都市60分》60分钟直播版块", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1300", "name":"《谁是赢家》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1400", "name":"女性剧场三集连播", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1700", "name":"《快乐生活一点通》精编版", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1730", "name":"《地宝当家》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1800", "name":"《都市现场》90分钟直播版块", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1930", "name":"《都市情缘》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2000", "name":"《晚间800》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2020", "name":"《都市剧场》黄金剧(第1集)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2110", "name":"《都市剧场》黄金剧(第2集)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2200", "name":"《拍案》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2230", "name":"江西新闻联播(重播)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2250", "name":"都市晚剧场", "link":"http://www.jxntv.cn/live/jxtv2.shtml" } ] }, { "week":"周一", "list":[ { "time":"0030", "name":"通宵剧场六集连播", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0530", "name":"《都市现场》60分钟精编版(重播)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0630", "name":"《快乐生活一点通》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0700", "name":"《e早晨报》60分钟直播版块", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0800", "name":"精选剧场四集连播", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1120", "name":"《地宝当家》(重播)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1200", "name":"《都市60分》60分钟直播版块", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1300", "name":"《谁是赢家》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1400", "name":"女性剧场三集连播", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1700", "name":"《快乐生活一点通》精编版", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1730", "name":"《地宝当家》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1800", "name":"《都市现场》90分钟直播版块", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1930", "name":"《都市情缘》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2000", "name":"《晚间800》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2020", "name":"《都市剧场》黄金剧(第1集)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2110", "name":"《都市剧场》黄金剧(第2集)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2200", "name":"《拍案》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2230", "name":"江西新闻联播(重播)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2250", "name":"都市晚剧场", "link":"http://www.jxntv.cn/live/jxtv2.shtml" } ] },{ "week":"周二", "list":[ { "time":"0030", "name":"通宵剧场六集连播", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0530", "name":"《都市现场》60分钟精编版(重播)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0630", "name":"《快乐生活一点通》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0700", "name":"《e早晨报》60分钟直播版块", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0800", "name":"精选剧场四集连播", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1120", "name":"《地宝当家》(重播)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1200", "name":"《都市60分》60分钟直播版块", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1300", "name":"《谁是赢家》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1400", "name":"女性剧场三集连播", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1700", "name":"《快乐生活一点通》精编版", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1730", "name":"《地宝当家》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1800", "name":"《都市现场》90分钟直播版块", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1930", "name":"《都市情缘》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2000", "name":"《晚间800》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2020", "name":"《都市剧场》黄金剧(第1集)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2110", "name":"《都市剧场》黄金剧(第2集)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2200", "name":"《拍案》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2230", "name":"江西新闻联播(重播)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2250", "name":"都市晚剧场", "link":"http://www.jxntv.cn/live/jxtv2.shtml" } ] },{ "week":"周三", "list":[ { "time":"0030", "name":"通宵剧场六集连播", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0530", "name":"《都市现场》60分钟精编版(重播)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0630", "name":"《快乐生活一点通》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0700", "name":"《e早晨报》60分钟直播版块", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0800", "name":"精选剧场四集连播", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1120", "name":"《地宝当家》(重播)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1200", "name":"《都市60分》60分钟直播版块", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1300", "name":"《谁是赢家》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1400", "name":"女性剧场三集连播", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1700", "name":"《快乐生活一点通》精编版", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1730", "name":"《地宝当家》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1800", "name":"《都市现场》90分钟直播版块", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1930", "name":"《都市情缘》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2000", "name":"《晚间800》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2020", "name":"《都市剧场》黄金剧(第1集)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2110", "name":"《都市剧场》黄金剧(第2集)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2200", "name":"《拍案》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2230", "name":"江西新闻联播(重播)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2250", "name":"都市晚剧场", "link":"http://www.jxntv.cn/live/jxtv2.shtml" } ] },{ "week":"周四", "list":[ { "time":"0030", "name":"通宵剧场六集连播", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0530", "name":"《都市现场》60分钟精编版(重播)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0630", "name":"《快乐生活一点通》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0700", "name":"《e早晨报》60分钟直播版块", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0800", "name":"精选剧场四集连播", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1120", "name":"《地宝当家》(重播)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1200", "name":"《都市60分》60分钟直播版块", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1300", "name":"《谁是赢家》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1400", "name":"女性剧场三集连播", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1700", "name":"《快乐生活一点通》精编版", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1730", "name":"《地宝当家》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1800", "name":"《都市现场》90分钟直播版块", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1930", "name":"《都市情缘》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2000", "name":"《晚间800》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2020", "name":"《都市剧场》黄金剧(第1集)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2110", "name":"《都市剧场》黄金剧(第2集)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2200", "name":"《拍案》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2230", "name":"江西新闻联播(重播)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2250", "name":"都市晚剧场", "link":"http://www.jxntv.cn/live/jxtv2.shtml" } ] },{ "week":"周五", "list":[ { "time":"0030", "name":"通宵剧场六集连播", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0530", "name":"《都市现场》60分钟精编版(重播)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0630", "name":"《快乐生活一点通》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0700", "name":"《e早晨报》60分钟直播版块", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0800", "name":"精选剧场四集连播", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1120", "name":"《地宝当家》(重播)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1200", "name":"《都市60分》60分钟直播版块", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1300", "name":"《谁是赢家》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1400", "name":"女性剧场三集连播", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1700", "name":"《快乐生活一点通》精编版", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1730", "name":"《地宝当家》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1800", "name":"《都市现场》90分钟直播版块", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1930", "name":"《都市情缘》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2000", "name":"《晚间800》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2020", "name":"《都市剧场》黄金剧(第1集)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2110", "name":"《都市剧场》黄金剧(第2集)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2200", "name":"《拍案》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2230", "name":"江西新闻联播(重播)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2250", "name":"都市晚剧场", "link":"http://www.jxntv.cn/live/jxtv2.shtml" } ] },{ "week":"周六", "list":[ { "time":"0030", "name":"通宵剧场六集连播", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0530", "name":"《都市现场》60分钟精编版(重播)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0630", "name":"《快乐生活一点通》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0700", "name":"《e早晨报》60分钟直播版块", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"0800", "name":"精选剧场四集连播", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1120", "name":"《地宝当家》(重播)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1200", "name":"《都市60分》60分钟直播版块", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1300", "name":"《谁是赢家》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1400", "name":"女性剧场三集连播", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1700", "name":"《快乐生活一点通》精编版", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1730", "name":"《地宝当家》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1800", "name":"《都市现场》90分钟直播版块", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"1930", "name":"《都市情缘》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2000", "name":"《晚间800》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2020", "name":"《都市剧场》黄金剧(第1集)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2110", "name":"《都市剧场》黄金剧(第2集)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2200", "name":"《拍案》", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2230", "name":"江西新闻联播(重播)", "link":"http://www.jxntv.cn/live/jxtv2.shtml" }, { "time":"2250", "name":"都市晚剧场", "link":"http://www.jxntv.cn/live/jxtv2.shtml" } ] }] });

Remarque : Le processus d'implémentation est exactement le même que le code écrit par la troisième personne. Créez également un script puis supprimez-le

Pour plus de développement Python [Django] : recherche combinée, JSONP. , articles liés au filtrage XSS, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn