>  Q&A  >  본문

python - 如何通过django的ORM远程发布文章?

利用django的ORM可以方便的给数据库插入文章
但是假如我django放在阿里云,那我想在本地写个插件,每天很方便的插入一些数据,最好是通过ORM的,因为管理起来比较方便,会涉及到多个站,可能会有200多个站,而ORM接口就不要每次输入密码了,类似wrodpress的接口这种

如果用SQL插入,就感觉不太优雅,而且比较麻烦,每次都要链接,数据库,因为这些站很可能会分到好几个数据库里


这里补充一下吧.其实需求很简:
就是在本地的电脑上,控制远程的django,实现批量发布文章和管理文章的功能!

最好能用到django的ORM


如果没办法解决,那么如何让本地的python脚本很方便的管理远程服务器的python的脚本,可以直接操作远程脚本进行一些命令等


7月8日再补充一下说明:

答案里面不少说暴露api的方式,我研究了一下,好像不太可以~
理由:

  1. 我django的models是这样设计的,里面有这些字段:

category = models.ForeignKey(Category, verbose_name=u'分类')
title = models.CharField(max_length=100, verbose_name=u'标题')

img = models.CharField(max_length=200,
                       default='/static/img/article/default.jpg')

tags = models.CharField(max_length=200, null=True, blank=True,
                         verbose_name=u'标签', help_text=u'用逗号分隔')
summary = UEditorField('摘要', height=300, width=1000,
    default=u'', blank=True, imagePath="uploads/images/",
    toolbars='besttome', filePath='uploads/files/')

content = UEditorField('内容', height=300, width=1000,
    default=u'', blank=True, imagePath="uploads/images/",
    toolbars='besttome', filePath='uploads/files/')
is_tuijian = models.BooleanField(default=False, verbose_name=u'推荐')
view_times = models.IntegerField(default=0)
zan_times = models.IntegerField(default=0)

is_top = models.BooleanField(default=False, verbose_name=u'置顶')
rank = models.IntegerField(default=0, verbose_name=u'排序')
status = models.IntegerField(default=0, choices=STATUS.items(),
                             verbose_name='状态')
# pub_time = models.DateTimeField(default=False,verbose_name=u'发布时间')
pub_time = models.DateTimeField(auto_now_add = True,verbose_name=u'发布时间')  #博客日期
create_time = models.DateTimeField(u'创建时间', auto_now_add=True)
update_time = models.DateTimeField(u'更新时间', auto_now=True)

大家大概体验一下就可以了~就是说字段很多,而且基本都是非空字段,但是都有设置默认值!

用暴露api的方式,其实和自己写sql语句的效果差不多~:

插入的数据,每个字段都要写,比如sql语句, 你就不能只是简单的写个 title content category 这3个字段的值,而其他的django的ORM已经定义好了!

我大概举个例子大家就会明白!!!
比如如果用sql插入的话可能要构建这样一条语句:

INSERT INTO `zhangte`.`blog_article` (`id`,`title`,`img`,`summary`,`content`,`view_times`,`zan_times`,`is_top`,`rank`,`status`,`pub_time`,`create_time`,`update_time`,`category_id`,`tags`,`is_tuijian`,`is_tuijian`) VALUES ('{id}','{title}','{img}','{summary}','{content}','{view_times}','{zan_times}','{is_top}','{rank}','{status}','{pub_time}','{create_time}','{update_time}','{category_id}','{tags}','{is_tuijian}','{is_tuijian}');

暂且不说字段多,看起来杂!
而且万一我程序修改一个字段,那这个代码就不能用了!
那暴露api,其实也是一样的,比如我要post数据~那post数据,每个对应的字段都要写!
等于其实跟sql差不多的,结果可能是data 要写成这样:

data = {}
data["pk"] = pk
data["title"] = title
data["content"] = content
data["view_times"] = view_times
^^^^此处省略余下十几个字段!!!

等于说我每个字段都要定义,要不然会出现错误(因为都是非空!)

那如果有人建议,把这些字段改下可以空的话不就可以~?如果真是这样,那以后我怎么进行数据筛选?!?!!??!?


其实我想要的是这个效果!!!

假如能用django的ORM,就很方便了
插入数据只要:

 article = Article.objects.get_or_create(
                 pk = pk,
                 title = title,
                 content = content,
                 category = fenlei,
                 summary = summary,
             )[0]

就插入一条数据了!
这样的好处:

  1. 代码简洁

  2. 我以后对程序进行修改,比如增加字段等,就非常方便,理由大家应该都懂的!

还有很多好处!我相信如果django的ORM可以解决的话,肯定比如暴露api或是直接用sql语句操作方便很多吧

PHP中文网PHP中文网2741일 전493

모든 응답(3)나는 대답할 것이다

  • ringa_lee

    ringa_lee2017-04-18 09:05:00

    • 구현하고 싶은 작업을 Command로 작성

    • Ssh 접속 및 명령 실행

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-18 09:05:00

    Django를 사용할 때는 일반적으로 ORM을 사용해야 합니다.

    1. API 노출을 고려한 다음 매개변수와 함께 요청을 보내 목적을 완료할 수 있습니다. 예를 들어 Linux에는 컬이 있습니다.

    2. 스크립트로 작성해 보세요.

    매개변수 이름이 반드시 데이터베이스 필드 이름과 동일할 필요는 없기 때문에 하나의 필드를 변경하여 모든 필드를 사용할 수 없게 만드는 것은 불가능합니다. 매개변수가 너무 많으면 기본값을 설정할 수 있습니다.
    솔직히 이 방법은 비교적 흔한 방법인데...
    게다가 스크립트를 이용하면 원하는 효과를 얻을 수도 있습니다.

    회신하다
    0
  • 黄舟

    黄舟2017-04-18 09:05:00

    Django 관리자 관리 배경이 귀하의 요구를 충족할 수 없습니까?

    회신하다
    0
  • 취소회신하다