Quand je préparais les données pour le front-end aujourd'hui, j'avais besoin de convertir le format de données au format json. Pour être honnête, quand il s'agit de chinois, c'est parfois vraiment pénible, à moins d'avoir un bon. compréhension des règles de codage de Python, c'est vraiment difficile à traiter.
Toute la logique
Ce que nous devons traiter, c'est traiter certains articles, générer plusieurs fichiers html, puis utiliser json pour afficher la liste des articles , photos, résumé et titre.
Idée
Pour une future expansion des données, il doit y avoir une base de données. Mon idée est d'écrire moi-même une simple page Web comme entrée de soumission, puis de la publier sur. l'arrière-plan Après l'avoir entré dans la base de données, écrivez une page pour afficher l'article. Une fois l'effet d'affichage correct, écrivez une requête pour explorer dynamiquement toutes les données et générer des documents html un par un. J'ai juste besoin d'extraire les données json finales de la base de données et de les générer.
Front-end
En fait, les éléments front-end sont très simples. J'ai récemment écrit des pages Web, donc les éléments front-end peuvent être effectués. en quelques minutes. Le code est le suivant :
urls.py from django.conf.urls import url, include from . import views urlpatterns = { url(r'^$', views.index, name='index'), url(r'add_article/', views.add_article, name='add_article'), url(r'^article/(?P<main_id>\S+)/$', views.article, name='article'), } views.py # coding=utf-8 from django.shortcuts import render from .models import Tzxy # Create your views here. def index(request): return render(request, 'index.html') def add_article(request): error = 'error' if request.method == 'POST': # 获取前段request的内容 main_id = request.POST['main_id'] img_url = request.POST['img_url'] title = request.POST['title'] content = request.POST['content'] abstract = content[:50] print main_id indb = Tzxy( main_id=main_id, img_url=img_url, title=title, content=content, abstract=abstract ) indb.save() error = 'success' return render(request, 'index.html', {'error': error}) return render(request, 'index.html') def article(request, main_id): article_detial = Tzxy.objects.get(main_id=main_id) return render(request, 'views.html', {'content': article_detial}) models.py from __future__ import unicode_literals from django.db import models from django.contrib import admin class Tzxy(models.Model): main_id = models.CharField(max_length=10) img_url = models.CharField(max_length=50, null=True) title = models.CharField(max_length=50) content = models.TextField() abstract = models.CharField(max_length=200) admin.site.register(Tzxy)
Le modèle que je viens d'écrire est un formulaire simple
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link href="http://libs.baidu.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet"> <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script> <script src="http://libs.baidu.com/bootstrap/3.0.3/js/bootstrap.min.js"></script> </head> <body> <form method="post" action="/tzxy/add_article/"> {% csrf_token %} main_id: <input type="text" name="main_id"><br> img_url: <input type="text" name="img_url"><br> title: <input type="text" name="title"><br> {% if error == 'success' %} <p class="alert alert-success">{{ error }}</p> {% endif %} <textarea name="content" rows="25" style="width: 600px;"></textarea><br> <input type="submit" name="Submit"> </form> </body> </html>
Page affichée
{% load custom_markdown %} <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" /> <meta name="apple-touch-fullscreen" content="yes" /> <meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="format-detection" content="telephone=no"> <meta http-equiv="Cache-Control" content="no-store" /> <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Expires" content="0" /> <title>{{ content.title }}</title> <link rel="stylesheet" href="../../css/cssreset.min.css"> <link rel="stylesheet" href="../../css/fx_tzxy_content.min.css"> </head> <body> <p class="page"> <h1>{{ content.title }}</h1> <p class="content"> {{ content.content | custom_markdown | linebreaksbr }} </p> </p> </body> </html>
Bien sûr, j'ai utilisé le markdown pour traiter certaines données. Pour l'intégration des démarques, vous pouvez aller sur "Django Development Blog (6) - Ajouter le support des démarques"
Le petit script pour explorer les données est le suivant, vous devez utiliser le module de requêtes
# coding=utf-8 import sys import requests reload(sys) sys.setdefaultencoding('utf8') def tohtml(file_name, startpos, endpos): """ 请求网页数据后把网页源码存储为html格式,启动脚本时要先启动Django的Server :param file_name:生成文件名的前缀,最后一位用传入的数字来代替 :param startpos:开始的数字 :param endpos:结束的数字 :return:None """ for x in range(startpos, endpos): r = requests.get('http://127.0.0.1:8000/tzxy/article/' + file_name + str(x)) with open('/Users/SvenWeng/Desktop/test/' + file_name + str(x) + '.html', 'w') as f: f.write(r.text) print 'success' if __name__ == '__main__': tzhtl_name = 'tzxy_tzhtl_h_' djjyy_name = 'tzxy_djjyy_h_' tohtml(djjyy_name, 1, 39)
Certains noms qu'il contient peuvent être modifiés selon les besoins.
Générer json
Pour être honnête, la façon d'utiliser json est très simple, et la prise en charge de json par Python est également très bonne, mais quand il s'agit de chinois C'est un peu ennuyeux, mon code est comme ceci :
# coding=utf-8 import sqlite3 import json import sys reload(sys) sys.setdefaultencoding('utf8') list_json = [] conn = sqlite3.connect('db.sqlite3') c = conn.cursor() sql = 'select * from Tzxy_tzxy' c.execute(sql) all_thing = c.fetchall() for x in all_thing: dic_member = {'id': x[1].split('_')[3], 'img': x[2], 'title': x[3], 'abstract': ''} list_json.append(dic_member) conn.close() final_json = json.dumps(list_json, sort_keys=True, indent=4) with open('test.json', 'w') as f: f.write(final_json)
La logique du code est : définir une liste vide pour contenir le généré informations du dictionnaire, puis récupérez toutes les données précédemment enregistrées à partir de sqlite. Bouclez les données pour générer un dictionnaire au format souhaité et insérez-le dans la liste un par un. Utilisez ensuite la méthode json.dumps fournie par Python pour convertir les données au format json, puis écrivez-les dans le fichier.
La logique ne semblait poser aucun problème et l'implémentation était parfaite, mais à la fin, lorsque j'ai ouvert le fichier json pour vérifier, j'ai découvert que tous les caractères chinois étaient devenus Unicode. Il s'agit simplement d'une arnaque.
Après une recherche approximative, il semble que le contenu mentionné sur Internet ne soit pas détaillé, et les exemples donnés sont tous très, très simples. Ils sont donnés directement au chinois, ce qui n'est pas ce que je pense. Je veux. Oui, à la fin, j'ai dû mordre la balle et lire les instructions officielles, et j'ai finalement trouvé une telle chose ensure_ascii=False Utilisez cette méthode lors de la conversion de Python en Json, c'est-à-dire
.final_json = json.dumps(list_json, sort_keys=True, indent=4, ensure_ascii=False)
Après traitement de cette manière, le fichier écrit sera en chinois normal.
La méthode ci-dessus de lecture et d'écriture de JSON en Python impliquant le chinois est tout le contenu partagé par l'éditeur. J'espère qu'elle pourra vous donner une référence, et j'espère que vous soutiendrez le site Web PHP chinois.
Pour plus d'articles liés à la lecture et à l'écriture de Json en Python impliquant des méthodes de traitement chinoises, veuillez faire attention au site Web PHP chinois !