最终效果:
摩拳擦掌,开始制作过程:
新建项目和app:
新建项目
django-admin startproject first
添加apppython3 manage.py startapp blog
项目目录下settings.py添加应用:
INSTALLED_APPS = [
....
'blog.apps.BlogConfig',
]
建立模型:models.py
文件:
说明:
在django2.0后,定义外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错:
TypeError: __init__() missing 1 required positional argument: 'on_delete'
参数说明:
on_delete有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五个可选择的值
CASCADE:此值设置,是级联删除。
PROTECT:此值设置,是会报完整性错误。
SET_NULL:此值设置,会把外键设置为null,前提是允许为null。
SET_DEFAULT:此值设置,会把设置为外键的默认值。
SET():此值设置,会调用外面的值,可以是一个函数。
一般情况下使用CASCADE就可以了。
迁移数据库,一顿操作猛如虎:
python3 manage.py makemigrations
和python3 manage.py migrate
项目的urls.py
配置:
urlpatterns = [
...
path('blog/', include('blog.urls')),
]
应用的urls.py
配置:
from django.urls import path
from . import views
app_name = 'blog'
urlpatterns = [
path('', views.index, name='index'),
]
使用模板继承,妈妈再也不会担心我敲的代码冗余了。base.html
:index.html
:
猛敲python3 manage.py runserver
,访问一下http://127.0.0.1:8000/blog/
,看能不能转:
简单搞一下管理后代,方便以后发博文。
项目下admin.py
文件就是你啦。
访问:http://127.0.0.1:8000/admin/
,创建超级用户python3 manage.py createsuperuser
按提示操作,输入账号进入后台。
就这样子,东一榔头西一棒。来搞博文详情页吧。
设置blog/urls.py
每篇博文通过传递的博客文章唯一属性id来识别。:
urlpatterns = [
...
path('post/<int:post_id>/', views.detail, name='detail'),
]
views.py
文件,获取传递过来的post_id
,通过模型读取博客文章,如果不存在返回404错误:
模板detail.html
文件:
代码基本撸玩了,进页面看一下吧。
简直完美。骨架弄好了,咱来添砖加瓦吧。让博客详情页支持传说中的Markdown
,给机器装一下markdown
,行云流水的敲下pip3 install markdown
。然后继续在IDE中撸代码。views.py
撒上markdown
花椒后味道会不会更香一点?
当然这里光撒上花椒后味道还不能散发出来,被Django的安全机制挡住了。咱开启一下,detail.html
里的
{{ post.body | safe }}
加上safe
就是不一样。然后引入css样式文件就好啦,这些静态的文件上线的时候都要集中收集好,统一部署。所以base.html文件第一行要加上
{% load static %}
在head标签里再加上
<link rel="stylesheet" href="{% static 'blog/css/highlights/github.css' %}">
参照Django手册引入静态文件的方式做就可以咯。效果真是杠杠的!
这样基本的博客也就搭建好了,博文详情页的上一篇下一篇这个功能稍后再弄。先看一下大体效果: