Home  >  Q&A  >  body text

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 days ago494

reply all(3)I'll reply

  • ringa_lee

    ringa_lee2017-04-18 09:05:00

    • Write the operation you want to implement as Command

    • Ssh connect to it and execute Command

    reply
    0
  • 怪我咯

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

    When using Django, you must generally use its ORM.

    1. You can consider exposing the API, and then complete your purpose by sending a request with parameters. For example, there is curl under Linux.

    2. Written into a script.

    Well, it is impossible to change one field to make all fields unavailable, because the parameter name does not necessarily have to be the same as the database field name. As for too many parameters, you can set default values.
    To be honest, this is a relatively common method...
    In addition, the effect you want can be achieved using a script.

    reply
    0
  • 黄舟

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

    Django admin management background can’t meet your needs?

    reply
    0
  • Cancelreply