前言
上次写了第一个入门的小例子,今天呢,咋们来搭建一个博客网站,所以今天会学到django中的model,以及template模板。
上一篇地址
代码
-
首先, 我们在之前的根目录mysite/下面新建一个app,起名叫blog:
python manage.py startapp blog
一个项目是可以有很多个APP的哟 -
接下来我们创建一个实体类,首先进入blog/models.py,在底部加入如下代码:
class Blog(models.Model): #继承自models.Model title = models.CharField(max_length=20) #博客的标题 最大长度设置为20个字符 body = models.TextField() #博客的内容 timestamp = models.DateTimeField() #发表博客的日期及时间
这就是我们的博客实体模型了,就是Java中的bean对象。到时候我们可以通过这个类对数据库进行访问,而不需要写SQL语句!!!我们这里使用的数据库是默认的sqlite3,可以在mysite/settings.py中看到。因为这个是python自带的数据库,所以不需要额外安装。
-
接下来进入mysite/settings.py,找到INSTALLED_APPS,加入'blog',结果如下所示
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog',#也就是我们刚刚创建的blog文件夹,我们的blog是一个APP哟 ]
把blog加入到上面之后,django就知道要包含blog这个APP了,之后就可以通过Blog对象建表了。
-
让django帮我们自动生成Blog对应的表!
在根目录执行
python manage.py makemigrations
,这句话是告诉django,你对models做了一些改变,在这里,我们是增加了一个Blog类。然后输入
python manage.py migrate
,完成建表。通过输出的信息你会发现建立了很多表,因为上面有很多APP,里面有各种表哟。我们的只是其中一个罢了。
Applying blog.0001_initial... OK
这句话就是建立我们的表啦~ -
创建一个后台管理员,管理我们的各种models,这里也就是管理我们的Blog表。
执行:
python manage.py createsuperuser
,然后按照提示输入你要注册的用户名,邮箱以及设置密码就可以了。 -
将我们的Blog注册到管理员,让管理员能够访问到。
打开blog/admin.py,加入下面几行代码:
from .models import Blog #从当前目录的models.py中导入Blog类 # Register your models here. admin.site.register(Blog)
这样我们就可以在后台访问到Blog了
-
启动服务
python manage.py runserver
-
浏览器输入: localhost:8000/admin
然后输入你刚刚注册的用户名和密码,接下来你就可以看到如下画面啦
管理员界面上面的Blog就是我们刚刚注册的哟,我们点击add,然后在页面中输入我们的内容:
输入内容然后点击SAVE即可保存到数据库。
所以以后你可以很方便的管理你的数据库中的表,只需要调用admin.site.register()方法就可以在后台查看到你的表了。
-
接下来,我们在blog/文件夹下面新建一个目录,叫templates,用来存放html文件。
这时候,我们的文件目录应该是这样的:
目录结构 -
在网页中展示我们的Blog:
首先我们要在blog/templates目录下新建一个blog_list.html文件:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>My Blog</title> </head> <body> {% for blog in blog_list %} <div> <h1>{{ blog.title }}</h1> <p>{{ blog.body }}</p> <span>{{ blog.timestamp|date:'Y-M-D' }}</span> </div> {% endfor %} </body> </html>
上面的网页在django中是称作模板,在里面可以写很多动态的元素,由django渲染后生成html,例如
{% for blog in blogList %} {% endfor %}
是一个迭代器,中间的元素会被迭代很多次,所以可以动态生成html标签。{{ blog.title }}
这个是取blog的title属性的值。 -
我们要在views.py中取出数据库中的Blog对象,然后交给这个html:
打开blog/views.py,加入如下代码:
from .models import Blog #导入Blog类 # Create your views here. def blog_list(request): #方法不能漏掉一个参数 blog_list = Blog.objects.all()#获取数据库中Blog的所有对象 return render(request, 'blog_list.html', {'blog_list': blog_list}, )#把数据交给blog_list.html进行渲染
render()的第一个参数是request,第二个是html模板,第三个是字典,也就是我们要传递到html的参数,html访问的是字典的key。所以你现在可以回过头看看我们上面编写的html了!
-
最后让浏览器能够找到我们的页面,在mysite/urls.py中进行配置:
from django.conf.urls import include, url from django.contrib import admin from blog.views import blog_list #增加这行 导入blog_list方法 urlpatterns = [ url(r'^polls/', include('polls.urls')), url(r'^admin/', admin.site.urls), url(r'^blog/',blog_list)#增加这行 用blog_list方法渲染 ]
相信大家看过上一篇的对上面的代码应该不陌生了。
-
启动服务进行访问:
浏览器输入:http://localhost:8000/blog/
就可以看到刚刚用admin增加的Blog对象了!!!
效果图
后记
这篇文章只是走马观花的过一遍流程而已,让我们再理清一下思路:
- 新建了一个app,要在mysite/settings.py中进行注册
- 实体模型写在models.py中,一个实体类就对应了数据库的一张表。
- 在views.py中我们可以通过实体类对数据库进行访问,不需要写SQL语句。常用的获取对象的方法我们下一篇再讲
- views.py获取的对象可以通过字典的形式传到template中,然后通过模板语言进行访问,动态生成html
- 通过配置mysite/urls.py,将URL链接与方法绑定起来。
网友评论