Django练习项目之搭建博客
背景:自从今年回家过年后,来到公司给我转了试用,我的学习效率感觉不如从前,而且刚步入社会我总是想要怎么想明白想清楚一些事,这通常会花掉,消耗我大量的精力,因为我想把我的生活管理规划好了,而在it技术学习上就没有了年前那股猛劲,从3月开始学习Django,到现在已经5个月了,期间有差不多1个月忙毕业论文,再加上回了趟家(打乱了学习节奏),Django的学习路程就显的更加缓慢了,值得一提的事,我在Python学习上更深入了一层,之前学会的也就是Python基本语法,然后不断的用if ,for ...写了几个脚本,而这次,我通过学习 廖雪峰 的Python 教程,对IO,进程线程,Json,正则,MD5,GUI,网络编程,邮件收发,访问数据库,等都有了大致了解,学习的时候很是认真的,但是练习是很少很少的,没有需求和好的想法,很难让我着手去写些什么..
深入了解学习Python之后,首先发现了Python的强大,也知道了以后,未来,或者是不久将来马上自己能用Python做些怎么样的有趣的东西,甚至还能帮我赚点外快,然后我本着Linux爱好者的心,开始了对 Git 的学习,同样也是看的 廖雪峰 的教程,Git的学习并不是很难,练习几下也就会了,当然我说的是基本的版本控制,然后我马上转入了,我一直想进入的 Github 大门,我觉得作为一个程序开放者,尤其是学习了开源的,没有自己的Github 都不算入门,Github的强大太多太多,这里就不一一说了,已经跑题了!! 学习完github给电脑配置好ssh,又回到了Django学习中,于是心血来潮,有了这篇我认为很重要的博客,作为这一大段时间学习成果的一个简单记录.
Github官网https://github.com/
我的github https://github.com/fankcoder
对自己无语了,自己的吐槽技能真是+++
回来正题拉!!,正题是啥来着?! Django练习项目之搭建博客
一,环境
1.Python
2.Django
二,安装
1.你的电脑没有Python? 不用多说了坑人的Windows,送你友情连接 www.baidu.com
2.Django安装,推荐先装个pip吧,easyinstall也可以,然后终端下输入:
pip install Django
强烈推荐用新的Django版本!!1.8.1现在够新么?找的教程都是1.6.x的够新新新了!!!
pip install Django==1.8.1
测试一下安装成功否
终端下:
python
import django
django.VERSION
(1, 8, 1, 'final', 0) 成功~!
三,开始
1.创建博客项目
找个干净的文件夹,终端下:
django-admin.py startproject nameblog
这里nameblog是示例,自己记得换哦
打开文件夹,或者cd nameblog/ 输入ls
发现项目创建好了~
2.创建博客app
终端下:cd nameblog/ 刚才已经cd进去的同学这步省了
然后输入:
python manage.py startapp blog
打开文件夹瞅一眼,发现多了个blog文件夹,
这时候blog项目app就创建好了~
2.简单设置一下
打开nameblog/nameblog/settings.py
进行如下设置,也就是加上一条blog:
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog', )
顺便换下Django默认语言把,你要是英文大神,请别鸟我,第二句是换时区,不换你就自个倒时差吧,好像永远差8小时~
LANGUAGE_CODE = 'zh_CN' TIME_ZONE = 'Asia/Shanghai'
四,测试Django运行成功否
终端下输入,
注意现在的终端目录还应该是nameblog/下,而不是nameblog/nameblog下,请参考有manage.py的这层目录
好的,终端下输入:
python manage.py runserver
打开浏览器,
地址:127.0.0.1:8000或者localhost:8000
看到淡蓝色,提示,Django工作了~
说明项目搭建成功~
如果 python manage.py runserver跑不起来
可能8000端口被占用了,输入:
python manage.py runserver 8001
五,博客数据库
首页要知道
层次
|
职责
|
模型(Model),即数据存取层
|
处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。
|
模板(Template),即表现层
|
处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。
|
视图(View),即业务逻辑层
|
存取模型及调取恰当模板的相关逻辑。模型与模板之间的桥梁。
|
了解了Django先进的框架结构,就来一层一层的进行操作,
这里注意一下,我们并没有配置数据库,Django高级一点的版本会默认配置好,
数据库默认是sqlite3,如果你的博客,网站有很多人访问,sqlite3也够用了,
如果非常多的人使用建议换为,mysql,
配置是在settings.py
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), }
开始配置模型,首先打开模型文件,nameblog/blog/models.py
models.py是博客数据库的,每个类都是数据库中的一张表,
配置如下:
class Tag(models.Model): tag_name = models.CharField(max_length=20) create_time = models.DateTimeField(auto_now_add=True) def __unicode__(self): return self.tag_name class Classification(models.Model): name = models.CharField(max_length=20) def __unicode__(self): return self.name class Author(models.Model): name = models.CharField(max_length=30) email = models.EmailField(blank=True) website = models.URLField(blank=True) def __unicode__(self): return u'%s' % (self.name) class Article(models.Model): caption = models.CharField(max_length=30) subcaption = models.CharField(max_length=50,blank=True) publish_time = models.DateTimeField(auto_now_add=True) update_time = models.DateTimeField(auto_now = True) author = models.ForeignKey(Author) classification = models.ForeignKey(Classification) tags = models.ManyToManyField(Tag, blank=True) content = models.TextField()
我们要做博客app,就要写文章,文章需要的一些基本信息,这里都涵盖了,
标签,分类,作者信息,发布时间等,也可以加入自己想要的表,
保存退出,
同步数据库,在终端输入下:
python manage.py syncdb
# 进入 manage.py 所在的那个文件夹下输入这个命令
注意:Django 1.7 及以上的版本需要用以下命令
python manage.py makemigrations
python manage.py migrate
第一次 同步数据库会让用户输入管理员帐号密码
六,配置视图
不多说了,打开nameblog/blog/views.py
from django.shortcuts import render from blog.models import Article, Tag, Classification from django.template import RequestContext def blog_list(request): blogs = Article.objects.all().order_by('-publish_time') return render(request,'index.html',{"blogs":blogs})
这里看到视图函数返回index.html,我们不是还没有创建html首页吗?对的!
七,创建模板首页
模板在app中默认没有这个文件夹,需要手动创建blog/templates/
*.html文件是要放在blog/templates/下
简单写点html欢迎代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>fank</title> </head> <body> <h1>欢迎光临xx的博客</h1> </body> </html>
但是这是静态页面还用Django搭建起来未必太Low了吧?
加上等下我们会发布的博客文章
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>fank</title> </head> <body> <h1>欢迎光临xx的博客</h1> <div> {% for blog in blogs %} <div class="blog_body"> <div class="blog_title"><a href="/blog/detail/?id={{ blog.id }}">{{ blog.caption }}</a></div> <div class="blog_info"> <ul class="blog_info_list"> <li>分类:{{ blog.classification }}</li> <li>发表时间:{{ blog.publish_time|date:"Y-m-d H:i" }}</li> <li>标签: {% for tag in blog.tags.all %} {{ tag.tag_name }} {% endfor %} </li> </ul> </div> <div class="blog_description"> {{ blog.content }} </div> </div> {% endfor %} </div> </body> </html>
保存退出.
八,配置url
直到现在,我们启动项目
python manage.py runserver
你会发现,开始萌萌哒Django欢迎界面,说好的博客app呢?!
想要访问到网页,需要配置Url
打开nameblog/nameblog/urls.py
配置:
urlpatterns = [ url(r'^admin/', include(admin.site.urls)), url(r'^$','blog.views.blog_list',name='blog_list'), ]
这时候,把项目跑起来
python manage.py runserver
你会发现,
欢迎光临xx的博客
成功了~!
九,美化网页
没有css,js的网页不是好网页
创建blog/static/images; blog/static/css; blog/static/js
美化html,自己搞把,或者下载现成的模板,美化大家不一个品,这里就不上我的例子了
注意:静态文件加载需要设置settings.py
STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR,'collected_static') STATICFILES_DIRS = ( os.path.join(BASE_DIR), '/home/icgoo/pywork/fankblog/blog/static/', ) STATICFILES_FINDERS = ( "django.contrib.staticfiles.finders.FileSystemFinder", "django.contrib.staticfiles.finders.AppDirectoriesFinder", )
收集静态文件,终端下:
python manage.py collectstatic
再次打开萌萌哒的首页,让人眼前一亮,有没有?...
十,Django后台
又人开始吐槽了,做了这么久的博客app,到现在一篇文章都木有啊,什么鬼!
Django给我们提供了一个强大的后台管理,我们通过它来管理文章
打开blog/admin.py,没有则新建
from django.contrib import admin from .models import Article admin.site.register(Article)
只需要这三行代码,我们就可以拥有一个强大的后台!
提示:urls.py中关于 admin的已经默认开启
运行服务器,
python manage.py runserver
访问 http://localhost:8000/admin/ 输入设定的帐号和密码
点击 Articles,动手输入 添加几篇文章,
再访问首页
发现文章出现在首页了~!!
十一,代码托管到Github
确保目录在nameblog/
$ git init //初始化
$ touch README
$ git add README //更新README文件
$ git commit -m 'first commit'//提交更新,并注释信息“first commit”
$ git remote add origin git@github.com:yourproject/nameblog.git //连接远程github项目
$ git push -u origin master //将本地项目更新到github项目上去
现在查看github上面的blog项目,
是不是发现已经将本地中的README文件更新上来了。
:) 恭喜!