我刚刚开始使用django tastypie,而且我很喜欢它.我的问题:我正在搜索与管理视图中相同的功能:为foreignkey字段指定在其他对象的列表响应中看到的内容以及详细响应中的内容.
让我们说这是我简化的模型:
class Location(models.Model):
name = models.CharField(max_length=256, blank=True)
longitude = models.FloatField(blank=True, default=0.0)
latitude = models.FloatField(blank=True, default=0.0)
description = models.CharField(max_length=256, blank=True)
shortname = models.CharField(max_length=256, blank=True)
tooltiptext = models.CharField(max_length=1000, blank=True)
locationtype = models.ForeignKey(LocationType, blank=True, null=True)
public_anonymous = models.BooleanField(default=False, blank=False, null=False)
public_authorized = models.BooleanField(default=False, blank=False, null=False)
def __str__(self):
return '%s' % (self.name)
class Variable(models.Model):
abbreviation = models.CharField(max_length=64, unique=True)
name = models.CharField(max_length=256, blank=True)
unit = models.CharField(max_length=64, blank=True)
def __str__(self):
return '%s [%s]' % (self.name, self.unit)
class Timeseries(models.Model):
locationkey = models.ForeignKey(Location)
variablekey = models.ForeignKey(Variable) …Run Code Online (Sandbox Code Playgroud) 我在docker容器中有nginx,在另一个docker容器中有一个nodejs webapp.可以从端口8080上的主机服务器访问nodejs服务器.
nginx docker容器正在侦听端口80(稍后将执行证书,首先此基础必须正常工作).
现在我希望将子域转发到此8080 nodejs应用程序.让我们说app1.example.com
从外面我可以通过服务器ip(或主机名)和端口8080到达app,但不能在app1.example.com上.它确实适用于app1.example.com:8080(我在主机服务器上打开了端口8080).
当我接近app1.example.com时,我得到一个糟糕的网关nginx消息所以我进入第一个nginx容器,但是如何回到主机服务器代理将其传递到主机服务器的端口8080(而不是端口) 8080的nginx容器).寻找反向EXPOSE语法.
主要的问题是,当然如果我使用ip和端口127.0.0.1:8080它将尝试nginx容器....那么如何让nginx容器路由回到主机127.0.0.1:8080?
我已经尝试了0.0.0.0并定义了一个上游,实际上一直在谷歌搜索,并尝试了很多配置......但还没有找到一个工作....
编辑 刚发现,这个docker命令可能会有所帮助:
sudo docker network inspect bridge
Run Code Online (Sandbox Code Playgroud)
这显示了cotainers中使用的IP地址(在我的情况下为172.17..0.2),但不确定每次docker重启时这个地址都保持不变...(例如服务器重启)
编辑 跟随碱性答案我现在有(但仍然没有工作):
我的docker-compose.yml文件:
version: "2"
services:
nginx:
container_name: nginx
image: nginx_img
build: ../docker-nginx-1/
ports:
- "80:80"
networks:
- backbone
nodejs:
container_name: nodejs
image: merites/docker-simple-node-server
build: ../docker-simple-node-server/
networks:
- backbone
expose:
- 8080
networks:
backbone:
driver: bridge
Run Code Online (Sandbox Code Playgroud)
和我的nginx(为简单起见,跳过conf.d文件夹中的包含):
worker_processes 1;
events {worker_connections 1024; }
http {
sendfile on;
upstream upsrv {
server nodejs:8080;
}
server {
listen 80;
server_name app1.example.com;
location / …Run Code Online (Sandbox Code Playgroud) 我试图使JXTable中的列成为一个组合框.很难解释我面临的问题.当您单击下拉列表时,下拉列表有时不会保持打开足够长的时间以便您选择该值.它只是关闭并选择了一些值.有时它会保持开放状态供您选择一个值.这是SSCCE:
import java.awt.Color;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultCellEditor;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.table.DefaultTableModel;
import org.jdesktop.swingx.JXFrame;
import org.jdesktop.swingx.JXTable;
import org.jdesktop.swingx.renderer.CellContext;
import org.jdesktop.swingx.renderer.ComponentProvider;
import org.jdesktop.swingx.renderer.DefaultTableRenderer;
public class Test {
public static void main(String[] args) {
JXFrame frame=new JXFrame();
Object[][] rows = new Object[10][];
for (int i = 0; i < rows.length; i++) {
rows[i] = new Object[]{
"Test data ","Yes"};
}
DefaultTableModel model = new DefaultTableModel(rows,
new String[]{
"Title 1", "Title 2"
});
final JXTable table = new JXTable(model);
DefaultComboBoxModel cmodel = …Run Code Online (Sandbox Code Playgroud) 我使用Processvia ProcessBuilder来运行用C代码生成的可执行文件.我正在抓住Process.exitValue()这个退出值的反应.我注意到并非所有退出值都来自可执行文件.例如,我得到退出值139并且在我的C代码中没有任何地方返回139的退出值.
我试图找到退出值的概述,但我找不到这个,现在我发现退出值可以取决于操作系统.(我顺便使用Ubuntu).
一切顺利的时候,唯一可以肯定的退出值是0.是否有关于退出值的规范?我可以确定某个范围只能用于我自己的程序吗?为操作系统保留了哪些退出代码.
我发现139可能是C代码中的内存错误.我想摆脱可能.我无法获得退出值的任何概述(例如139 = .....)
这是简化的代码:
ProcessBuilder p = new ProcessBuilder(executableName,
executableArguments);
final Process shell = p.start();
InputStream shellIn = shell.getInputStream();
int shellExitStatus = shell.exitValue();
Run Code Online (Sandbox Code Playgroud)
注意:在Ubuntu shell中运行C可执行文件根本不会产生任何错误(即退出值0).但是,在Java中执行相同的命令会退出值139.
我制作了一个 api,它返回一个对象作为 json 数据。我正在使用 django-rest-framework 及其序列化程序。使用资源 (ModelResource),我排除了一些字段,例如名为“所有者”的属性。其中一个字段是其自身的外键。我想在 api 中显示这个字段(所以我使用 depth=2),但我想排除与我在返回的对象中排除的字段相同的字段。有没有一个很好的方法来做到这一点(我已经尝试了几件事没有想要的结果)。
这是我的(简化)代码:在 models.py 中:
class MyObject(models.Model):
name = models.CharField(max_length=256, blank=True)
parent = models.ForeignKey('self', blank=True, null=True, default=None)
and_some_otherfields = models.otherFields(....)
owner = models.ForeignKey(User, null=True, blank=True, related_name='myobject_owner')
Run Code Online (Sandbox Code Playgroud)
在资源.py:
class MyObjectResource(ModelResource):
model = MyObject
exclude = ('owner','and some other fields',)
Run Code Online (Sandbox Code Playgroud)
在用于返回对象的视图中,它返回以下内容:
data = Serializer(depth=2).serialize(my_object)
return Response(status.HTTP_200_OK, data)
Run Code Online (Sandbox Code Playgroud)
在响应中,它省略了排除字段(正如我想要和预期的那样)。
但是在父字段中,父对象 myobject 包含我想隐藏的所有字段。
我正在寻找一种方法来表明对于这个父对象,序列化程序应该使用相同的资源,或者将次要字段添加到排除列表中......
如果我使用 depth =1,它只显示它是否有父级 ([]),如果没有则显示 null,并且我至少需要知道父级的 ID。
自从星期五以来,我一直在尝试做这项工作,搜索谷歌和这里.我的最终目标是能够拍摄多张带有标题和描述的照片,然后将它们上传到服务器,然后显示在网页上.
到目前为止我所拥有的是:能够为一个图像提供标题和描述,浏览图库,查找图像并选择它.但是当我这样做时,图像会立即与表格一起上传.我希望能够使用提交按钮执行此操作.
我还有一个按钮来取代图像,并显示页面上的图像预览.但是当我用相机拍摄图像时,我不知道如何上传我的表格.我能够使用div和innerHTML调用在屏幕上打印图像数据......但老实说,我已经迷失了,甚至不知道从哪里开始发布特定的代码片段.我将发布整个页面,因为它现在存在....
<html>
<head>
<title>File Transfer Example</title>
<script type="text/javascript" charset="utf-8" src="cordova-2.3.0.js"></script>
<script type="text/javascript" charset="utf-8">
var pictureSource; // picture source
var destinationType; // sets the format of returned value
// Wait for Cordova to load
//
document.addEventListener("deviceready", onDeviceReady, false);
// Cordova is ready
//
function onDeviceReady() {
pictureSource=navigator.camera.PictureSourceType;
destinationType=navigator.camera.DestinationType;
}
function browse(){
navigator.camera.getPicture(uploadPhoto,
function(message) { alert('get picture failed'); },
{ quality: 50,
destinationType: navigator.camera.DestinationType.FILE_URI,
sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY }
);
}
function uploadPhoto(imageURI) {
var options = new FileUploadOptions();
options.fileKey="file";
options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1);
options.mimeType="image/jpeg"; …Run Code Online (Sandbox Code Playgroud) 每当我在测试期间使用requestFactory时:
from django.contrib.auth.models import User
from django.test import TestCase
from django.test.client import RequestFactory
from django.test.client import Client
import nose.tools as nt
class TestSomeTestCaseWithUser(TestCase):
def setUp(self):
# Every test needs access to the request factory.
self.factory = RequestFactory()
self.client = Client()
self.user_foo = User.objects.create_user('foo', 'foo@bar.com', 'bar')
def tearDown(self):
# Delete those objects that are saved in setup
self.user_foo.delete()
def test_request_user(self):
self.client.login( username='foo', password='bar')
request = self.factory.post('/my/url/', {"somedata": "data"})
nt.assert_equal(request.user,self.user_foo)
Run Code Online (Sandbox Code Playgroud)
在我尝试使用request.user的所有内容上:
AttributeError: 'dict' object has no attribute 'user'
Run Code Online (Sandbox Code Playgroud)
这不起作用,所以我添加了一个解决方法:
def test_request_user(self):
# …Run Code Online (Sandbox Code Playgroud) 我正在java中编写测试程序来测试我与django中的restfull api的连接(精确地说是djangorestframework).其中一个选择是用卷曲测试api.从shell运行curl命令它工作正常:例如:
curl --show-error --request GET --header 'Accept: application/json' --user "user:pwd" http://127.0.0.1:8000/api/v1/
Run Code Online (Sandbox Code Playgroud)
这很好地返回了json格式的api根URL和helptext.
现在,当我尝试使用ProcessBuilder从java调用相同的内容时,我得到了这样的答案:
{"detail": "You do not have permission to access this resource. You may need to login or otherwise authenticate the request."}
Run Code Online (Sandbox Code Playgroud)
我使用的java代码是:
ProcessBuilder p=new ProcessBuilder("curl","--show-error", "--request","GET",
"--header","'Accept: application/json'", "--user","\"" + userName + ":" + password + "\"", getApiRootUrlString());
final Process shell = p.start();
Run Code Online (Sandbox Code Playgroud)
因为我也通过以下方式捕获错误流:
InputStream errorStream= shell.getErrorStream();
InputStream shellIn = shell.getInputStream();
Run Code Online (Sandbox Code Playgroud)
我知道他启动了curl命令,因为在其中一个选项中出错会显示curl帮助文本.
我不确定调用它之间的区别是什么,非常确定它是相同的命令.
顺便说一句,'getApiRootUrlString()'返回正确的url: http://127.0.0.1:8000/api/v1/
我正在使用django-nose在django(1.4)中运行我的单元测试.
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
Run Code Online (Sandbox Code Playgroud)
创建数据库需要很长时间.
所以我发现把它放在settings.py中:
os.environ['REUSE_DB'] = "1"
Run Code Online (Sandbox Code Playgroud)
应该做的伎俩.
实际上django itsellve给出了这个建议:
To reuse old database "<path not very interesting>/var/sqlite/unittest.db" for speed, set env var REUSE_DB=1.
Run Code Online (Sandbox Code Playgroud)
当然,您需要使用此标志= 0运行一次(或在每次数据库更改后)
但是,当您将标志设置为0时,我的测试以注释结束:
Destroying test database for alias 'default'...
Run Code Online (Sandbox Code Playgroud)
因此,当我想重复运行它时......没有什么可以重用...而且我会得到错误,表示该表不存在
DatabaseError: no such table: <and than a table name>
Run Code Online (Sandbox Code Playgroud)
将reuse_db设置为0时,测试运行完美
我在我的开发设置中使用测试数据库别名:
DATABASES = {
'default': {
'NAME': os.path.join(BUILDOUT_DIR, 'var', 'sqlite', 'development.db'),
'TEST_NAME': os.path.join(BUILDOUT_DIR, 'var', 'sqlite', 'unittest.db'),
'ENGINE': 'django.db.backends.sqlite3',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
}
}
Run Code Online (Sandbox Code Playgroud)
我没有使用内存中的sqllite数据库进行测试,因为我读到某个地方这对django-nose不起作用.
那么如何在最终销毁数据库时重用数据库...
根据这个https://docs.djangoproject.com/en/1.4/topics/testing/#the-test-database django这样做,但它没有显示如何防止这种情况(如果我可以),或者如何使用reuse_db选项.我应该使用其他设置吗?
我的问题是如何将JXTable列(仅适用于一个/特定列)的超链接转换为我的默认桌面Web浏览器的"_blank"链接.
我使用JXTable和DefaultTableModel,我也从sqlite数据库调用数据.我在互联网,谷歌,[...]进行了研究,我发现了很多信息,如果我没有犯错:
***注意:该列每个单元只有1个链接,没有任何文本,只有链接.
现在我已经实现了这个代码来做一个双击单元格的动作.请有人可以帮我实现一个列超链接,这个超链接在默认浏览器中打开,就像在这个例子中一样(但我不知道如何调整,因为数据不是从数据库中调用的).
Table_Employee.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
JXTable target = (JXTable)e.getSource();
int row = target.getSelectedRow();
int column = target.getSelectedColumn();
JFrame newFrame = new JFrame(); //I want to open an distinc link
newFrame.setTitle("Detail Screen"); //for every cell along one column
newFrame.setVisible(true); //in the web browser, not a frame.
}
}
});
Run Code Online (Sandbox Code Playgroud)
编辑1 @Kleopatra编辑2的代码对我的应用程序有一些问题.此外,我做了另一个尝试,如下面的代码,瞧 - 当涉及第一次点击时链接是存在的,但没有反应(没有浏览器打开).@Kleopatra,您能否向我提供有关您的建议的更多信息,因为当我尝试放置该代码时,IDE无法识别hyperlinkColumn.
Table_Employee.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) …Run Code Online (Sandbox Code Playgroud)