python - 如何通过django的ORM远程发布文章?
PHP中文网
PHP中文网 2017-04-18 09:03:00
0
3
513

利用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中文网

认证高级PHP讲师

全部回覆(3)
左手右手慢动作
  • 把你要實現的操作寫成 Command

  • ssh 連上去,執行 Command

刘奇

用Django一般一定是用到它的ORM了。

  1. 你可以考慮暴露出API,然後透過發送request帶上參數來完成你的目的。例如linux下有curl。

  2. 寫成腳本。

呃改一個欄位導致全部不可用,是不可能的,因為參數名稱未必必須和資料庫欄位名稱相同。至於參數過多,你可以設定預設值。
講道理這是個比較常見的方式…
另外,你想要的效果應該可以用腳本完成。

黄舟

django admin管理後台滿足不了你的需求嗎?

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板