利用django的ORM可以方便的给数据库插入文章
但是假如我django放在阿里云,那我想在本地写个插件,每天很方便的插入一些数据,最好是通过ORM的,因为管理起来比较方便,会涉及到多个站,可能会有200多个站,而ORM接口就不要每次输入密码了,类似wrodpress的接口这种
如果用SQL插入,就感觉不太优雅,而且比较麻烦,每次都要链接,数据库,因为这些站很可能会分到好几个数据库里
这里补充一下吧.其实需求很简:
就是在本地的电脑上,控制远程的django,实现批量发布文章和管理文章的功能!
最好能用到django的ORM
如果没办法解决,那么如何让本地的python脚本很方便的管理远程服务器的python的脚本,可以直接操作远程脚本进行一些命令等
答案里面不少说暴露api的方式,我研究了一下,好像不太可以~
理由:
我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]
就插入一条数据了!
这样的好处:
代码简洁
我以后对程序进行修改,比如增加字段等,就非常方便,理由大家应该都懂的!
还有很多好处!我相信如果django的ORM可以解决的话,肯定比如暴露api或是直接用sql语句操作方便很多吧
実装したい操作をコマンドとして記述します
Ssh で接続してコマンドを実行します
Django を使用する場合は、通常、その ORM を使用する必要があります。
API を公開することを検討し、パラメーターを含むリクエストを送信して目的を完了することができます。たとえば、Linux にはカールがあります。
スクリプトに書き込みます。
パラメータ名は必ずしもデータベースのフィールド名と同じである必要はないため、1 つのフィールドを変更してすべてのフィールドを使用できなくなることは不可能です。パラメーターが多すぎる場合は、デフォルト値を設定できます。
正直に言うと、これは比較的一般的な方法です...
さらに、スクリプトを使用して目的の効果を実現できます。
Django 管理者管理の経歴だけではニーズを満たすことができませんか?