我有一个基于jquery的单页webapp.它通过AJAX调用与RESTful Web服务进行通信.
我正在努力完成以下任务:
我现在有1和2工作,客户端jquery应用程序通过基于JSON数据创建DOM元素来显示网页中返回的数据.从Web服务的角度来看,我也有#3工作,这意味着如果给出正确的JSON参数,它将创建并返回二进制文件.但我不确定在客户端javascript代码中处理#3的最佳方法.
是否有可能从这样的ajax调用中获取可下载的文件?如何让浏览器下载并保存文件?
$.ajax({
type: "POST",
url: "/services/test",
contentType: "application/json",
data: JSON.stringify({category: 42, sort: 3, type: "pdf"}),
dataType: "json",
success: function(json, status){
if (status != "success") {
log("Error loading data");
return;
}
log("Data loaded!");
},
error: function(result, status, err) {
log("Error loading data");
return;
}
});
Run Code Online (Sandbox Code Playgroud)
服务器响应以下标头:
Content-Disposition:attachment; filename=export-1282022272283.pdf
Content-Length:5120
Content-Type:application/pdf
Server:Jetty(6.1.11)
Run Code Online (Sandbox Code Playgroud)
另一个想法是生成PDF并将其存储在服务器上并返回包含该文件的URL的JSON.然后,在ajax成功处理程序中发出另一个调用,执行以下操作:
success: function(json,status) {
window.location.href = json.url;
}
Run Code Online (Sandbox Code Playgroud)
但这样做意味着我需要对服务器进行多次调用,而我的服务器需要构建可下载的文件,将它们存储在某处,然后定期清理该存储区域.
必须有一种更简单的方法来实现这一目标.想法?
编辑:在查看$ .ajax的文档后,我看到响应dataType只能是其中之一xml, html, script, json, jsonp, text,所以我猜测没有办法使用ajax请求直接下载文件,除非我在使用中嵌入二进制文件@VinayC答案中建议的数据URI方案(这不是我想做的事情).
所以我想我的选择是:
不使用ajax而是提交表单帖子并将我的JSON数据嵌入到表单值中.可能需要搞乱隐藏的iframe等.
不使用ajax而是将我的JSON数据转换为查询字符串以构建标准GET请求并将window.location.href设置为此URL.可能需要在我的单击处理程序中使用event.preventDefault()以防止浏览器从应用程序URL更改. …
我的sqlite数据库中有两个类,一个名为的父表Categorie和一个名为的子表Article.我首先创建了子表类并添加了条目.所以首先我有这个:
class Article(models.Model):
titre=models.CharField(max_length=100)
auteur=models.CharField(max_length=42)
contenu=models.TextField(null=True)
date=models.DateTimeField(
auto_now_add=True,
auto_now=False,
verbose_name="Date de parution"
)
def __str__(self):
return self.titre
Run Code Online (Sandbox Code Playgroud)
在我添加了父表后,现在我models.py看起来像这样:
from django.db import models
# Create your models here.
class Categorie(models.Model):
nom = models.CharField(max_length=30)
def __str__(self):
return self.nom
class Article(models.Model):
titre=models.CharField(max_length=100)
auteur=models.CharField(max_length=42)
contenu=models.TextField(null=True)
date=models.DateTimeField(
auto_now_add=True,
auto_now=False,
verbose_name="Date de parution"
)
categorie = models.ForeignKey('Categorie')
def __str__(self):
return self.titre
Run Code Online (Sandbox Code Playgroud)
所以当我跑步时python manage.py makemigrations <my_app_name>,我收到这个错误:
Traceback (most recent call last):
File "manage.py", line 15, in <module>
execute_from_command_line(sys.argv)
File …Run Code Online (Sandbox Code Playgroud) 所以,我在MyApp文件夹中有一个models.py文件:
from django.db import models
class Model_One(models.Model):
...
class Model_Two(models.Model):
...
...
Run Code Online (Sandbox Code Playgroud)
它可以是大约10-15个班级. 如何找到MyApp中的所有模型并获取其名称?
由于模型不可迭代,我不知道这是否可行.
我是Symfony和phpUnit的新手.
我想进行一些测试,有很多折旧警告.但这并不重要,因为我现在会继续使用symfony 2.8.你知道是否可以删除它?
我试着自己找出来,但它不起作用,你有什么想法给我的人吗?
编辑:
参考@LBA的答案
我的截图不是关于AsseticBundle的错误,而是关于"剩余弃用通知(220)".我想知道是否有某个标志显示或不显示这些警告.我很想知道我的测试结果.那可能吗 ?
如果对于要过滤的字段,您有超过10个值,则过滤侧边栏开始变得难看且难以使用.
我正在寻找一种解决方案来替换<li>下拉选择(组合框)或类似的东西来解决同样的问题.
我想知道是否有关于如何对PHP特征进行单元测试的解决方案.
我知道我们可以测试一个使用该特性的类,但我想知道是否有更好的方法.
在此先感谢任何建议:)
编辑
另一种方法是在测试类本身中使用Trait,因为我将展示下面的内容.
但我并不热衷于这种方法,因为没有保证在特征,类和PHPUnit_Framework_TestCase(在本例中)之间没有类似的方法名称:
这是一个示例特征:
trait IndexableTrait
{
/** @var int */
private $index;
/**
* @param $index
* @return $this
* @throw \InvalidArgumentException
*/
public function setIndex($index)
{
if (false === filter_var($index, FILTER_VALIDATE_INT)) {
throw new \InvalidArgumentException('$index must be integer.');
}
$this->index = $index;
return $this;
}
/**
* @return int|null
*/
public function getIndex()
{
return $this->index;
}
}
Run Code Online (Sandbox Code Playgroud)
及其测试:
class TheAboveTraitTest extends \PHPUnit_Framework_TestCase
{
use TheAboveTrait;
public function test_indexSetterAndGetter()
{
$this->setIndex(123);
$this->assertEquals(123, …Run Code Online (Sandbox Code Playgroud) django中是否有模板过滤器,它将修剪输入文本中的任何前导或尾随空格.
就像是: {{ var.example|trim }}
我想创建一个静态页面,只有当他/她点击我的某个模型中提供的链接时才会向用户显示.我可以通过单独创建一个Python页面并调用它来实现这一点,但我想从Django调用它.用户界面应仅使用Django API构建.
有什么建议?
自从几天前(2015年11月30日)发布Symfony的最后一个LTS版本以来,我开始玩它.不幸的是,我无法使用在Symfony 2.7.7中运行良好的相同代码的写操作生成CRUD.
首先,我使用bashLinux Mint 17.2 创建一个新的Symfony项目:
symfony new tasks lts
Run Code Online (Sandbox Code Playgroud)
新目录tasks是在里面创建一个新的Symfony 2.8.0项目.
在app/config/parameters.yml我创建数据库后调整数据库凭据后:
app/console doctrine:database:create
Run Code Online (Sandbox Code Playgroud)
并生成一个新的包:
app/console generate:bundle --namespace=Acme/TasksBundle --format=yml
Run Code Online (Sandbox Code Playgroud)
然后我创建一个新目录src/Acme/TasksBundle/Resources/config/doctrine并为我的模型放置两个文件.这些是:
Task.orm.yml
Acme\TasksBundle\Entity\Task:
type: entity
repositoryClass: Acme\TasksBundle\Repository\TaskRepository
table: task
id:
id:
type: integer
generator: { strategy : AUTO }
fields:
description:
type: text
manyToMany:
tags:
targetEntity: Tag
inversedBy: tasks
cascade: [ "persist" ]
joinTable:
name: task_tag
joinColumns:
task_id:
referencedColumnName: id
inverseJoinColumns:
tag_id:
referencedColumnName: id
Run Code Online (Sandbox Code Playgroud)
Tag.orm.yml
Acme\TasksBundle\Entity\Tag:
type: entity
repositoryClass: Acme\TasksBundle\Repository\TagRepository
table: tag …Run Code Online (Sandbox Code Playgroud) 我有一个正确的电子邮件地址.我已经回应了它.但是当我发送它时,我收到以下错误:
Address in mailbox given [] does not comply with RFC 2822, 3.6.2.
Run Code Online (Sandbox Code Playgroud)
为什么?我使用laravel(swift mailer)发送电子邮件.
$ email = email@address.com
然后当我发送它时,错误被抛出.
但如果我直接使用该字符串,它会发送它.
这是块:
$email = email@address.com
Run Code Online (Sandbox Code Playgroud) django ×5
php ×4
django-admin ×2
phpunit ×2
python ×2
symfony ×2
ajax ×1
django-2.0 ×1
doctrine ×1
email ×1
javascript ×1
jquery ×1
laravel ×1
laravel-4 ×1
model ×1
rest ×1
swiftmailer ×1
symfony-2.8 ×1
testing ×1
traits ×1
unit-testing ×1