我有三个模型 - 文章,作者和推文.我最终需要使用Django REST Framework构建一个feed,它使用Article和Tweet模型将所有对象聚合成一个反向时间顺序的feed.
知道我怎么做吗?我觉得我需要创建一个新的序列化器,但我真的不确定.
谢谢!
编辑:这是我到目前为止所做的.
应用程序/ serializers.py:
class TimelineSerializer(serializers.Serializer):
pk = serializers.Field()
title = serializers.CharField()
author = serializers.RelatedField()
pub_date = serializers.DateTimeField()
Run Code Online (Sandbox Code Playgroud)
应用程序/ views.py:
class TimelineViewSet(viewsets.ModelViewSet):
"""
API endpoint that lists all tweet/article objects in rev-chrono.
"""
queryset = itertools.chain(Tweet.objects.all(), Article.objects.all())
serializer_class = TimelineSerializer
Run Code Online (Sandbox Code Playgroud) python django django-models django-views django-rest-framework
我正在使用AngularJS开发一个SPA应用程序,它使用Django后端作为服务器.我从SPA与服务器通信的方式是使用django-rest-framework.所以现在我想用facebook(google和twitter)进行身份验证,我在这个主题上阅读了很多内容,发现OAuth.io正在客户端SPA端进行验证,而python-social-auth正在做同样的事情但在服务器端.
所以目前我只有客户端身份验证,我的应用程序连接到Facebook(使用OAuth.io)并成功登录.此过程返回access_token然后我向我的API发出请求,该请求必须登录此用户或通过给定令牌为该用户创建帐户,此部分不起作用.所以我不确定我错在哪里,也许是因为没有关于使用python-social-auth的完整教程所以也许我错过了什么或者......我不知道..
所以我的一些代码:
在SPA方面:这是与OAuth.io的连接,并且正在工作,因为我正在获取访问令牌.然后我必须向我的其他API发出请求.后端是'facebook','google'或'twitter'
OAuth.initialize('my-auth-code-for-oauthio');
OAuth.popup(backend, function(error, result) {
//handle error with error
//use result.access_token in your API request
var token = 'Token ' + result.access_token;
var loginPromise = $http({
method:'POST',
url: 'api-token/login/' + backend + '/',
headers: {'Authorization': token}});
loginPromise.success(function () {
console.log('Succeess');
});
loginPromise.error(function (result) {
console.log('error');
});
});
Run Code Online (Sandbox Code Playgroud)
在我的settings.py中的服务器上,我已经为已安装的应用程序,模板上下文预处理器,一些auth后端添加了社交插件,这是我的文件:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
...,
'rest_framework',
'rest_framework.authtoken',
'api',
'social.apps.django_app.default',
'social'
)
TEMPLATE_CONTEXT_PROCESSORS = ("django.contrib.auth.context_processors.auth", …Run Code Online (Sandbox Code Playgroud) 下面第2节中的代码(这里的工作示例)基于第1节中的代码,但更改为使用箭头函数,它基于Mike Bostock在Toward Resusable Charts中的模式,即返回一个具有其他函数的函数.
如果我尝试在typescript(这里演示)中运行第1或第2部分中的代码,它会说出方法addToChart并且stop不存在类型(selection: any) => () => void.
addToChart和stop在这种情况下)添加到返回的功能?第1节
const mychart = function (){
let stop = false;
const chart = function(selection){
function tick(){
console.log("tick");
}
return tick;
};
// Adding a function to the returned
// function as in Bostock's reusable chart pattern
chart.addToChart = function(value){
console.log("addToChart");
return chart;
};
chart.stop = function(){
return stop = true;
} …Run Code Online (Sandbox Code Playgroud) 我已经构建了一个工具,允许人们将JSON地图样式应用于Google Map,现在我想添加对Google Static Maps API的支持.
使用以下样式数组:
"[{"stylers":[]},{"featureType":"water","stylers":[{"color":"#d2dce6"}]},{"featureType":"administrative.country","elementType":"geometry","stylers":[{"weight":1},{"color":"#d5858f"}]},{"featureType":"administrative.country","elementType":"labels.text.fill","stylers":[{"color":"#555555"}]},{"featureType":"administrative","elementType":"geometry.stroke","stylers":[{"visibility":"off"}]},{"featureType":"administrative.country","stylers":[{"visibility":"on"}]},{"featureType":"road.highway","stylers":[{"saturation":-100},{"lightness":40},{"visibility":"simplified"}]},{"featureType":"road.arterial","stylers":[{"saturation":-100},{"lightness":40},{"visibility":"simplified"}]},{"featureType":"road.local","stylers":[{"saturation":-100},{"visibility":"simplified"}]},{"featureType":"landscape","elementType":"all","stylers":[{"hue":"#FFFFFF"},{"saturation":-100},{"lightness":100}]},{"featureType":"landscape.natural","elementType":"geometry","stylers":[{"saturation":-100}]},{"featureType":"landscape.man_made","elementType":"geometry.fill","stylers":[{"visibility":"simplified"},{"saturation":-100}]},{"featureType":"poi.park","elementType":"geometry","stylers":[{"saturation":-100},{"lightness":60}]},{"featureType":"poi","elementType":"geometry","stylers":[{"hue":"#FFFFFF"},{"saturation":-100},{"lightness":100},{"visibility":"off"}]}]"
我需要最终将其转换为URLescaped字符串,格式为:( style=feature:featureArgument|element:elementArgument|rule1:rule1Argument|rule2:rule2Argument 更多文档)
到目前为止,我已经编写了这个JavaScript来尝试转换内容,但它无法正常工作:
function get_static_style(styles) {
var result = '';
styles.forEach(function(v, i, a){
if (v.stylers.length > 0) { // Needs to have a style rule to be valid.
result += (v.hasOwnProperty('featureType') ? 'feature:' + v.featureType : 'feature:all') + '|';
result += (v.hasOwnProperty('elementType') ? 'element:' + v.elementType : 'element:all') + '|';
v.stylers.forEach(function(val, i, a){
var propertyname = Object.keys(val)[0];
var propertyval = new String(val[propertyname]).replace('#', '0x');
result += propertyname + ':' + …Run Code Online (Sandbox Code Playgroud) javascript google-maps google-maps-api-3 google-maps-static-api
根据这个页面:
[Raleway]是一个展示面,下载包括旧式 和衬里数字,标准和酌情连字,一套完整的变音符号,以及一个风格的替代品,灵感来自更多的几何无衬线字体,而不是其新奇怪的灵感默认字符集.
(强调我的)
数字的默认值是"旧样式"("onum" OpenType特征字符串),在标题中使用时看起来非常糟糕.理想情况下,我希望能够使用"衬里"变体("lnum"),"tabular"("tnum")字距(与比例 - "pnum"相对).
我尝试使用下面的font-feature-settings声明块,但无济于事:
font-feature-settings: "onum" off, "pnum" off, "lnum" on, "tnum" on;
-moz-font-feature-settings: "onum=0, pnum=0, lnum=1, tnum=1"; /* Firefox */
-webkit-font-feature-settings: "onum" off, "pnum" off, "lnum" on, "tnum" on; /* WebKit */
-o-font-feature-settings: "onum" off, "pnum" off, "lnum" on, "tnum" on; /* Opera */
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?如果我想下载完整的字体,然后将其重新导出为网络字体,我怎么能这样做,同时确保我得到衬里数字?
谢谢!
我试图以类似于 Bluebird 的方式使用 Node 8 的方式来保证整个node_redis RedisClient对象util.promisifypromisifyAll()工作,但运气不佳。
这是我迄今为止尝试过的:
import * as _redis from 'redis';
import { promisify } from 'util';
const client = _redis.createClient();
const redis = Object.keys(client).reduce((c, key) => {
if (typeof c[key] === 'function') c[key] = promisify(c[key]).bind(c);
return c;
}, client);
Run Code Online (Sandbox Code Playgroud)
然而,这有效:
const redis = {
get: promisify(client.get).bind(client),
set: promisify(client.set).bind(client),
hget: promisify(client.hget).bind(client),
hmset: promisify(client.hmset).bind(client),
};
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
编辑:我想使用util.promisify而不是像 Bluebird 这样的东西的主要原因是因为我在 TypeScript 中做这一切,而 BluebirdpromisifyAll似乎不适用。
我有以下数组:
[0] => Array
(
[name] => The Name
[description] => description
[date] => Thur, May 5 @ 7:00 p.m.
[rating] => PG
[year] => 2011
)
[1] => Array
(
[name] => Name 2
[description] => description 2
[date] => Sun, May 8 @ 7:30 p.m.
[rating] => 14A
[year] => 2011
)
Run Code Online (Sandbox Code Playgroud)
还有大约5-10个零件.
我最终想要做的是使用数组的日期部分按天分组这些项目(即"所有带有"日期"的项目"落入"5月8日"应按此分组).
知道怎么回事吗?请注意,"日期"字段存储在DB中 - 这不是从date()转换的时间戳; 管他呢.
非常感谢!
使用HTML5 srcset 图像候选字符串的官方规范,我创建了以下正则表达式:
/<img[^\>]*[^\>\S]+srcset=['"](?:([^"'\s,]+)\s*(?:\s+\d+[wx])(?:,\s*)?)+["']/gm
Run Code Online (Sandbox Code Playgroud)
...哪个应匹配以下标记:
<img srcset="image@2x.png 2x, image@4x.png 4x, image@6x.png 6x">
Run Code Online (Sandbox Code Playgroud)
...和返回三个指定的文件名(image@2x.png,image@4x.png,image@6x.png).
但是,即使它匹配,它也只返回最后一个.请参阅此Regex101演示.
我究竟做错了什么?