以下的前端 JavaScript 框架使得使用 REST API 更加容易:
客户端调试不只是写 console.log() 和 console.dir()。但是大多数的测试工具都是针对框架的,一旦选择了工具,值得我们花时间深入学习如何写测试。
之前一直使用 Python 来完成 JavaScript 和 CSS 的压缩等工作,但是现在 JavaScript 社区中的相关工具更加专业,效果更好。该领域中最常用的工具是 Gulp,它类似 Python 中的 Fabric、Invoke 等自动化工具。
百度等没有索引指导文档,为这些引擎创建相应的 sitemap.xml,由于 AJAX 视图不是具体的 HTML,需要创建一个定制的视图:
from __future__ import absolute_import
from django.views.generic import TemplateView
from .flavors.models import Flavor
class SiteMapView(TemplateView):
template_name = "sitemap.xml"
def flavors(self):
return Flavor.objects.all()
以下是一个简单的 sitempa.xml:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{# Snip the home page, contact, etc #}
{% for flavor in view.flavors %}
<url>
<loc>{{ site.domain }}/app/#{{ flavor.slug }}</loc>
<lastmod>{{ flavor.modified }}</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
{% endfor %}
</urlset>
除了自创 sitempa.xml,还可以通过 brombone.com 等服务来处理你的 Angular.js 、Backbone.js 等网站,从而生成一个 Google 预览的 HTML 版页面。
优化最好的网站,往返半个地球产生的时延还是可察觉的,这是物理规律。因此,需要处理延时的问题。
多页型应用更容易创建。
使用 jQuery 时,可以创建一个 csrf.js 文件,然后在所有使用 AJAX 更新数据的页面上包含该文件。
// Place at /static/js/csrf.js
// CSRF helper functions taken directly from Django docs
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != ‘‘) {
var cookies = document.cookie.split(‘;‘);
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + ‘=‘)) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
var csrftoken = getCookie(‘csrftoken‘);
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/?(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
之后,将这些代码包含到页面中:
{% extends "base.html" %}
{% load static %}
{% block title %}Ice Cream Shopping Cart{% endblock %}
{% block content %}
<h1>Ice Cream Shopping Cart</h1>
<div class="shopping-cart"></div>
{% endblock %}
{% block javascript %}
{{ block.super }}
<script type="text/javascript"
src="{% static "js/csrf.js" %}"></script>
<script type="text/javascript"
src="{% static "js/shopping_cart.js" %}"></script>
{% endblock %}
// Place at /static/models.js
var newSync = Backbone.sync;
Backbone.sync = function(method, model, options){
options.beforeSend = function(xhr){
xhr.setRequestHeader(‘X-CSRFToken‘, CSRF_TOKEN);
};
return newSync(method, model, options);
};
通常将 CSRF 标识放在 HTTP 头中:
var app = angular.module(‘icecreamlandia.app‘);
app.config([‘$httpProvider‘, function($httpProvider) {
// The next two lines should just be one, but we had to break it
// up in order to preserve book formatting.
var common = $httpProvider.defaults.headers.common;
common[‘X-CSRFToken‘] = ‘{{ csrf_token|escapejs }}‘;
}]);
原文:https://www.cnblogs.com/haiiiiiyun/p/12567181.html