本篇内容是利用Python语言,在django模板下搭建一个小型博客,并能够通过admin页面进行添加。
Django入门之搭建一个小型博客
安装输入代码
$ sudo pip install Django==1.10.1
安装成功后使用
$python
>>>import django
>>>print (django.get(version())
可打印当前django版本
创建项目
首先要规划好项目创建的位置,我的是在f:/python
里面所以以后每次运行django执行项目都要在此文件夹下面。
进入文件cmd后输入命令f:/python/>django-admin startproject 项目名
这样一个项目就创建好了,相当于一个Python包的地位。
再次进入你的项目中cmd,输入python manage.py runserver
会得到一个网址
Starting development server at http://127.0.0.1.8000/
Quit the server with CONTROL-C
在浏览器中输入这串网址会得到一个it worked!的页面。至此一个django项目创建成功了。
创建应用
创建应用其实就在为刚刚创建的项目增加一些功能,进入到刚刚项目的文件夹中cmd输入
python manamg.py startapp blog
(blog是新创建的应用名)就会在项目的文件夹中多一个以应用名命名的文件夹,但想要将这个应用能够正常使用,需要将这个项目名添加到项目的settings.py中
找到settings.py中
INSTALLED_APP=[
'django.contirb.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.session',
'django.contrib.staticfiles',
'blog',#应用名
]
这样就基本实现了项目和应用的关联。
建立数据模型类
django中不需要通过SQL语句才能和数据库打交道,用Python的的方式创建数据模型后,Django会自动完成数据库创作。
在blog/models.py中编写数据模型类Blog
from django.db import models
from django.untils import timezone
from django.contrib.auth.models import User
class BlogArticles(models.Model):
title = models.CharField(max_length=300)
author = models.ForeignKey(User,related_name="blog_post")#1
body = models.DatetimeField(default=timezone.now )
class Meta:
ordering = ("-publish",) #2
def _unicode_(self):
return self.title
语句1 其实是通过字段author,使用ForrignKey()规定博客文章和用户之间的关系是一对多的关系,
而related_name=”blog_post”的作用是允许通过类User反向查询到BlogArticles
语句2 规定BlogArticles实例对象按publish字段倒序显示
这样一个博客的文章类模型就创建好了
使用python manage.py makemigrations
语句让django自动生成数据库表,保存在blog/migrations/0001_initial.py
中
使用python manage.py migrate
创建真正的数据库,保存在与项目同级文件夹中db.sqlite3中,打开数据库就可以自由添加。
到这里停一下,让我们回到0001_initial.py中,打开文件夹,会看到
field=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=300)),
('article', models.TextField()),
('publish', models.DateTimeField(default=django.utils.timezone.now)),
('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='blog_posts', to=settings.AUTH_USER_MODEL)),
],
我们没有创建id,但为什么会有,原来django自动创建id相当于主键来唯一标识BlogArticles
发布博客
最简单的发布博客的方式就是利用Django默认的admin管理博客
利用python manage.py createsuperuser
创建一个管理员,输入管理员姓名,密码要求至少8位
既然是管理员身份,当然管理员页面在blog/admin.py
页面。输入代码
from django.contrib import admin
from .models import BlogArticles
admin .site.register(BlogArticles)
这时,进入到http://127.0.0.1:8000/admin
中就会将blog关联到admin中
点击add可以进行添加博客,添加后在数据库中也可以查到
为在admin中显示到文章的更多属性,在admin.py中更新
from django.contrib import admin
from models import BlogArticles
class BlogArticlesAdmin(admin.ModelAdmin):
list_display = ("title","author","publish")
list_filed =("publish", "author")
search_field = ('title', "body")
raw_id_field = ("author",)
date_hierarchy = "publish"
ordering = ['publish', 'author']
admin.site.register(BlogArticles,BlogArticlesAdmin)
(使用Python2.7的小朋友有的没有pytz时区的包,需要安装一下使用python -m pip install pytz
)
页面访问博客
既然是博客当然不能只有管理员才能看见。
在blog/views.py中写函数
from django.shortcuts import render
from models import BlogArticles
def blog_title(requset):#1 接受响应请求
blogs = BlogArticles.objects.all() #2 获取BlogsArticles中所有信息
return render(request,"blog/titles.html",{"blogs":blogs})3
对于render函数,第一个参数必须是requset,然后是传送数据的位置,并且数据使用数据字典的方式传送给模板,就是titles.html。
我们的blog中并没有titles.html,所以我们在blog的子目录templates中创建一个titles.html
因为templates是django默认的存放模板的地方,会自动到templates上查找render()函数
为了方便我们将所有模板相同的部分放在一个base.html中
利用基础模板编写titles.html
接下来为url配置路径,首先是将应用配置到项目中
urlpatterns = [
url(r'^admin/',admin.site.urls),
url(r'^blog/',include('blog.urls',namespace='blog')),
]
再讲模板的路径配置到应用中
from django.conf.urls import url
from blog import views
urlpatterns = [
url(r'^$', views.blog_title, name="blog_title"),
]
“^
结束,所以访问此博客的路径就是http://127.0.0.1:8000/blog/
那么怎样查看博客内容
在blog/view.py中添加响应函数
def blog_article(request, article_id):
blog = BlogArticles.objects.get(id =article_id)
pub = article.publish
return render(request,"blog2/content.html"{"article":article,"publish":pub })
添加页面content.html
最后添加url路径
url(r'(?P<article_id>\d)/$',views.blog_article,name = "blog_detail"),
这样,一个完整简单博客就创建好了。