本文仅是用于操作记忆,长时间不用容易忘记,本来是打算云笔记里写好自己看的,可是云笔记里markdown图片比较麻烦,因些还是在简书上写好,到时可以收藏过去。本文大部份内容参考了虫师, 大家感兴趣,也可以直接访问,如有侵权,请告知,我会删除。
本操作的环境:
===================
Windows 10
python 3.6 https://www.python.org/
Django 2.0 https://www.djangoproject.com/
===================
0X01 创建项目
创建虚拟环境:
> md djangoproject
> cd djangoproject
> virtualenv --no-site-package venv
由于这个时候环境里是非常干净的,什么都没有,我们要安装django
> pip install django
创建mysite项目和blog应用
> django-admin startproject mysite # 创建项目
> cd mysite # 进入项目目录
> python manage.py startapp blog # 创建blog应用
项目目录结构:
路径结构.png
项目目录介绍:
manage.py : Django项目里面的工具,通过它可以调用django shell和数据库等。
mysite/
| --- settings.py : 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。
| --- urls.py : 负责把URL模式映射到应用程序。
| --- wsgi.py : 用于项目部署。
blog /
| --- admin.py : django 自带admin后面管理,将models.py 中表映射到后台。
| --- apps.py : blog 应用的相关配置。
| --- models.py : Django 自带的ORM,用于设计数据库表。
| --- tests.py : 用于编写Django单元测试。
| --- veiws.py :视图文件,用于编写功能的主要处理逻辑。
我们虽然创建了blog应用, 但是这个时候项目里面是没有blog应用的,我们要打开settings.py 配置文件,添加blog应用。
配置blog.png
0x02 创建admin数据
这里是为了能够进入django为我们默认的admin后台,django是一个很完善的框架,我们不必自己写admin后台。
直接使用django默认的SQLite3,如果有需要使用其他数据库,可以在settings.py里直接修改。
生成数据库
> python manage.py migrate
执行成功png注意: 执行这条命令的目录是在与manage.py同一个文件中,否则manage.py要带上路径名
创建超级管理员帐号
python manage.py createsuperuser
Username (leave blank to use 'fnngj'): admin # 管理员帐号,名字随你高兴
Email address: admin@mail.com # email,只是登录django使用,不用真实邮箱
Password: # 密码
Password (again): # 重复密码
Superuser created successfully.
0x03 启动django
通过Django自带的命令runserver启动
python manage.py runserver
访问Admin 后台:http://127.0.0.0:8000/admin , 使用前面创建的超级管理员账号。
登陆.png
可以看后台只有Groups,Users, 这是Django为我们自动生成用户管理。
后台.png
0x04 设计数据库 - Model层的使用
- 设计blog表
打开blog文件夹里面的model.py文件,接下来我们的主要战场都是在blog下面。
这里直接使用的是继承models.Model类,方便使用,我们不用手动写sql去建立表,scrapy也是借鉴的django的模式
from django.db import models
# Create your models here.
class BlogsPost(models.Model):
title = models.CharField(max_length = 150) # 博客标题,字符类型,最长150个字符
body = models.TextField() # 博客正文,文本类型
timestamp = models.DateTimeField() # 创建时间,日期类型
- 重新同步数据库
每次修改完model.py,都要重新同步数据库,这样才能把新的设置更新出来
> python manage.py makemigrations blog # 更新数据库,只有一个应用时blog可以不写
> python manage.py migrate # 同步数据库
- 通过Admin后台管理
新生成的数据库如果不添加进Admin是看不到的,我们要admin.py文件里添加上,才能通过Admin后台进行管理。
from django.contrib import admin
from blog.models import BlogsPost #导入BlogsPost
# Register your models here.
class BlogsPostAdmin(admin.ModelAdmin):
list_display = ['title', 'body', 'timestamp'] # 控制显示那些列
admin.site.register(BlogsPost, BlogsPostAdmin) # 注册
-
添加博客内容
再次登陆admin, 可以看到blog相关内容已经出现了。
blog内容.png
点击blogs posts添加内容
博客内容.png
添加完内容,点击save
0x05 模板 Template
在blog项目下创建templates目录(mysite/blog/templates/),在目录下创建模板文件index.html,内容如下:
<!DOCTYPE html>
<html>
<head>
<title>我的博客</title>
</head>
<body>
{% for blog in blog_list %}
<h2>{{ blog.title }}</h2>
<p>{{ blog.timestamp }}</p>
<p>{{ blog.body }}</p>
{% endfor %}
</body>
</html>
0x06 视图 View
修改mysite/blog/views.py文件:
from django.shortcuts import render
from blog.models import BlogsPost # 导入BlogsPost
# Create your views here.
def blog_index(request):
blog_list = BlogsPost.objects.all() # 取出数据库中所有数据
return render(request, 'index.html', {'blog_list':blog_list}) # 渲染数据到index.html页面
blog_list = BlogPost.objects.all() :获取数据库里面的所有BlogPost对象
render 渲染页面(index.html),相当于用blog_list里面的内容到index.html页面去填空。
0x07 设置url
所有的东西都设置好了,那么我们通过什么去看我们的页面呢,这里就涉及到了url, 我们要为我们的页面设置专属的url。
修改mysite/urls.py文件:
from django.contrib import admin
from django.urls import path
from blog import views #导入视图
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', views.blog_index), # 通过http://127.0.0.1:8000/blog/访问
]
我们在浏览器中输入 http://127.0.0.1:8000/blog/, 就能看到我们的博客了.
当然,丑是丑了点,可以自己加上css文件进行样式调整。
0x08 美化页面
有很多的前面模板可以下载,我这里推荐使用semantic ui, 语义法的方式真的很方便学习。
随便写一下 看看效果:
<!DOCTYPE html>
<html>
<head>
<title>我的博客</title>
<!-- 引入semantic -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/semantic-ui/2.2.4/semantic.min.css">
<script src="https://cdn.jsdelivr.net/semantic-ui/2.2.4/semantic.min.js"></script>
</head>
<body>
<div class="ui attached stackable menu">
<div class="ui container">
<a class="item">
<i class="home icon"></i> Home
</a>
<a class="item">
<i class="grid layout icon"></i> Browse
</a>
<a class="item">
<i class="mail icon"></i> Messages
</a>
</div>
</div>
<div class="ui container">
<div class="ui segment">
<div class="ui items">
{% for blog in blog_list %}
<div class="item">
<div class="content">
<a class="header">{{ blog.title }}</a>
<div class="meta">
<span>{{ blog.timestamp }}</span>
</div>
<div class="description">
<p>{{ blog.body }}</p>
</div>
</div>
</div>
<div class="ui divider"></div>
{% endfor %}
</div>
</div>
</div>
</body>
</html>
美化页面后.png
至此,最简单的博客搭建成功了,我们可以继续优化细节了。
网友评论