亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 json 將 django 日期時間傳遞到 golang 服務器

使用 json 將 django 日期時間傳遞到 golang 服務器

Go
慕萊塢森 2023-06-26 15:03:14
這是我的 Django 模型class Data(models.Model):    created = models.DateTimeField(null=True, blank=True, editable=False)    modified = models.DateTimeField(null=True, blank=True)    raw = models.TextField(null=True, blank=True)    uuid = models.CharField(blank=True, null=True, max_length=48,unique=True)    used = models.BooleanField(default=False,null=True)    name = models.CharField(blank=True, null=True, max_length=200)    geohash = models.CharField(blank=True, null=True, max_length=200)    def __str__(self):        return str(self.created) + ":" + str(self.raw)    def __unicode__(self):        return str(self.created) + ":" + str(self.raw)    def save(self, *args, **kwargs):        """ On save, update timestamps """        if not self.uuid :            self.uuid = str(uuid.uuid4().hex) +str(random.randint(1000,9999) )        if not self.id:            self.created = timezone.now()        self.modified = timezone.now()        # if not self.geoHash and (self.gpsLat and self.gpsLong):        # Geohash.encode(self.gpsLat, self.gpsLong)        return super(DataLbc, self).save(*args, **kwargs)    def toJson(self):        ret = {}        ret["Created"] = str(self.created)        ret["Modified"] = str(self.modified)        ret["Used"] = self.used        ret["Raw"] = self.raw        return ret這是我將其發送到我的 golang 服務器的方式:from RawOffer.models import Datawhile True:    try :        for data in Data.objects.all()[:10]:            requests.post("http://127.0.0.1:8087/convert/",json=data.toJson())    except Exception as e:        print(e)    time.sleep(5)但對于創建和修改當我嘗試接收它時我有{0001-01-01 00:00:00 +0000 UTC false}如何序列化 django 日期時間以將其以 json 形式發送以及如何在 golang 中獲取它?我的主要目標是將帶有日期的對象從 django 應用程序發送到 golang 中的微服務。所以我需要序列化 django 日期并且我需要寫很多文本,因為如果我沒有寫足夠的文本,stackoverflow 不會讓我發布我的程序......
查看完整描述

3 回答

?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

這是與該問題相關的一個工作示例,可能對將來的某人有所幫助。


服務器.go


package main


import (

    "fmt"

    "github.com/gin-contrib/cors"

    "github.com/gin-gonic/gin"

    "github.com/jmoiron/sqlx"

    "gopkg.in/guregu/null.v3"

    "strconv"

)



type RawOffer struct {

    Used_f        bool          `json:"Used_f"`

    Used_t        bool          `json:"Used_t"`

    RawOfferData  string        `json:"Raw"`

    Modified      null.Time     `json:"Modified"`

    Created       null.Time     `json:"Created"`

}


func convert(c *gin.Context) {

    var rawOffer RawOffer

    c.BindJSON(&rawOffer)


    fmt.Println(`Used_f       = ` + strconv.FormatBool(rawOffer.Used_f))

    fmt.Println(`Used_t       = ` + strconv.FormatBool(rawOffer.Used_t))

    fmt.Println(`RawOfferData = `, rawOffer.RawOfferData)

    fmt.Println(`Modified     = `, rawOffer.Modified)

    fmt.Println(`Created      = `, rawOffer.Created)

}



var db *sqlx.DB

func main() {

    fmt.Println("begin")

    r := gin.Default()

    r.Use(cors.Default())


    r.POST("/convert/", convert)

    r.Run((":8087"))

}

test.py


import requests

import json

import datetime



def default(o):

    if isinstance(o, (datetime.date, datetime.datetime)):

        return o.isoformat() + 'Z'


try :

    data = dict(

        Created = datetime.datetime.utcnow(),

        Modified = datetime.datetime.utcnow(),

        Used_f = False,

        Used_t = True,

        Raw = 'some raw data here',

    )


    datastr = json.dumps(data, default=default)


    print(datastr)

    requests.post("http://127.0.0.1:8087/convert/", datastr)

except Exception as e:

    print(e)

登錄test.py:


$ python test.py

{"Created": "2019-06-09T15:48:38.978230Z", "Modified": "2019-06-09T15:48:38.978689Z", "Used_f": false, "Used_t": true, "Raw": "some raw data here"}

登錄服務器:


begin

[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.


[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.

 - using env:   export GIN_MODE=release

 - using code:  gin.SetMode(gin.ReleaseMode)


[GIN-debug] POST   /convert/                 --> main.convert (4 handlers)

[GIN-debug] Listening and serving HTTP on :8087


Used_f       = false

Used_t       = true

RawOfferData =  some raw data here

Modified     =  {2019-06-09 15:48:38.978689 +0000 UTC true}

Created      =  {2019-06-09 15:48:38.97823 +0000 UTC true}

[GIN] 2019/06/09 - 11:48:39 |[97;42m 200 [0m|   16.979399ms |       127.0.0.1 |[97;46m POST    [0m /convert/



查看完整回答
反對 回復 2023-06-26
?
慕姐4208626

TA貢獻1852條經驗 獲得超7個贊

默認情況下,django 日期時間字段具有時區支持。你需要換個方式思考。或者您可以使用 django-extentions 。此第三方軟件包附帶一個創建和修改的日期時間字段,該字段不記錄時區,使用這兩個字段您將得到類似 {0001-01-01 00:00:00 } 的輸出



查看完整回答
反對 回復 2023-06-26
?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

我使用了一個骯臟的技巧來序列化日期:


def toJson(self):

    ret = {}

    date_handler = lambda obj: (

        obj.isoformat()

        if isinstance(obj, (datetime.datetime, datetime.date))

        else None

    )

    ret["Created"] = str(json.dumps(self.created, default=date_handler)).replace("\"","")

    ret["Modified"] = str(json.dumps(self.modified, default=date_handler)).replace("\"","")

    ret["Used"] = self.used

    ret["Raw"] = self.raw

    return ret

我希望有人能找到更好的解決方案


查看完整回答
反對 回復 2023-06-26
  • 3 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號