翻了下最近写的博文,发现就是python+django的阅读量排名高,于是推出第二期,本文主要针对后端程序。
django采用MVC(model,view,controller)架构。模型,试图,控制分开,有利于扩展和逻辑思考。
建议Ubuntu下eclipse开发,安装一个PDT插件,用python2.7进行编译,可以建立django工程,如website,然后建立应用web。
在web文件夹下建立文件夹templates,用来存放html文件,django可以自动找到。静态文件(css文件,js文件,图片等)放在哪里呢?网上一般都传也是放在web文件夹下的子文件夹里,我在本地开发的时候,也是这么干的,还是可以找到的,等到我搬到阿里云服务器的时候,发现有问题,静态文件尤其是图片时常找不到,通过浏览器右击“检查”命令可以看出。于是我调整他们的位置,将其放在website文件夹下,即与web同一深度时,更改一下apache2服务器的配置即可找到。
models.py
class News(models.Model):
news_occur_date = models.DateField()
news_caption = models.CharField(max_length = 200)
news_photo = models.ImageField(upload_to = 'news')
news_content = models.TextField()
news_pub_date = models.DateField()
def __str__(self):
return self.news_caption
在数据库中建立一张名为News的表,表内有五行,分别是news_occur_date(发生时间),news_caption(标题),news_photo(图片),news_content(内容),news_pub_date(发布时间)。实际上,该类继承了models.Model类,因此我们可以应用不同的field来实现对数据表的控制。关于field的用法,请参考
django field。
这里重点强调几个问题:1 ImageField,是关于图片的,它实际上在数据库里存放的是图片的位置信息,真正的图片是作为一个文件存放在服务器上的。图片处理需要调用PIL或者Pillow库,这个地方会报错,建议安装环境的时候,记得pip安装一下。
2 TextField存储进数据库,空格和换行信息虽然不至于丢失,但是前端调用时会出问题,前端要用filter处理一下。
3 def __str__(self) 相当于java里面的toString()方法,在这里的用途是作为后台的一个标记。
class NewsAdmin(admin.ModelAdmin):
list_display = ('news_occur_date','news_caption','news_pub_date')
看到admin.ModelAdmin,就可知道此类是后台对表的管理,列出的对象即是后台显示的效果。 list_display 貌似必须由一个元组或者字典赋值。
admin.py
admin.site.register(News, NewsAdmin)
需要注册一下。