菜鸡的Django学习笔记(三)完成一个博客
2017-12-03 23:51
399 查看
Model
model.py中是对数据库的操作,一个model类对应一张数据表所以说:
1.我们在model下建一个类(也就是建一个数据表)Article,这个类要继承models.Modle类
2.这个类中,创建我们需要的字段(数据库中的变量),比如Text,Content,并用适当的函数约束
# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import models # Create your models here. class Article(models.Model): title = models.CharField(max_length=32, default='Unamed Title') content = models.TextField(Null=True)
3.接着在manage.py 中生成这样的一个数据表,执行makemigrations,在执行migrate,这样数据表(modle)就建好了
4.如何在后台呈现这个数据表呢
首先要在数据库中放入数据如下(没有这一步会出现model matching query does not exist错误)
id = 1 title = Blog content = my blog
接着view.py 中让后台数据呈现出来
# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.shortcuts import render from . import models def index(request): article = models.Article.objects.get(pk=1) return render(request, '/home/wei/PycharmProjects/myblog/Templates/index.html', {'article': article})
HTML文件中改为
<body> <h1>{{article.title}}</h1> <h1>{{article.content}}</h1> </body>
这样基于数据库model的一个页面就出来了
Admin
通过使用startproject 创建的默认项目模版中,Admin 已启用,基本的配置已经自动生成,所以我们要做的就是:确定哪些东西可以在管理员界面编辑,即在Admin中register我们在model中建好的类(数据表)
在admin.py 中添加如下代码
# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.contrib import admin from models import Article # Register your models here. admin.site.register(Article)
并在model中添加
def __unicode__(self):return self.title
再在terminal中创建超级用户即可
完成blog界面
博客主页面能读取所有博客文章的title并超链接(HTML页面for … in …)(view.py 换get()为all()),并且要有写文章的超链接;博客显示界面要有修改超链接和返回超链接,并且每个博客页面的URL不同,用正则表达式匹配(view.py中每个函数就是一类页面,博客正文显示页面自然要新建一个view中的函数,urls.py记得添加,并新建一个HTML)
超链接配置,templates中提供了一种超链接配置方法
{% url 'app_name : url_name' param %}app_name 和url_name在urls中配置:根url中加入namespace=blog,子url中定义url的name
博客编辑界面
新建一个博客编辑页面,添加对应的后台代码
views.py 包含新建文章的函数和修改文章的函数
如何区分这个博客编辑页面是新建还是修改?(通过传回Article.id分辨,id默认为0,那么如果id为0,则为新建文章,否则,为修改文章)
if id == 0:新建文章则直接create一个新的Article实例,分别赋值,render回主页面即可;
否则, 修改文章应通过id get到所应修改的文章(实例),对该实例进行赋值,最后保存(
.save),render回文章显示页面
urls.py 添加对应的页面url
html 建立文章编辑的HTML页面,注意对于Article.id == 0?进行不同的操作方式
具体代码如下:
views.py
def article_edit(request, art_id): if str(art_id) == '0': return render(request, '/home/wei/PycharmProjects/myblog/Templates/article_edit.html') article = models.Article.objects.get(pk=art_id) return render(request, '/home/wei/PycharmProjects/myblog/Templates/article_edit.html', {'article': article}) def edit(request): title = request.POST.get('title', 'TITLE') content = request.POST.get('content', 'CONTENT') art_id = request.POST.get('art_id', '0') if art_id == '0': models.Article.objects.create(title=title, content=content) return HttpResponseRedirect('/blog/index') article = models.Article.objects.get(pk=art_id) article.title = title article.content = content article.save() return render(request, '/home/wei/PycharmProjects/myblog/Templates/article_page.html' 4000 , {'article': article})
urls.py
urlpatterns = [ url(r'^index/$', views.index, name='menu'), url(r'^art_page/(?P<art_id>[0-9]+)$', views.article_page, name='art_page'), url(r'^art_edit/(?P<art_id>[0-9]+)$', views.article_edit, name='art_edit'), url(r'^art_edit/edit/$', views.edit, name='edit') ]
article_edit.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Edit Page</title> </head> <body> <form action="{% url 'blog:edit' %}" method="post"> {% csrf_token %} {% if article %} <input type="hidden" name="art_id" value="{{ article.id }}" /> <lable> 文章标题 <input type="text" name="title" value="{{ article.title }}" /> </lable> <br/> <lable>文章内容 <input type="text" name="content" value="{{ article.content }}" /> </lable> <br/> {% else %} <lable> 文章标题 <input type="hidden" name="art_id" value="0" /> <input type="text" name="title"/> </lable> <br/> <lable>文章内容 <input type="text" name="content"/> </lable> <br/> {% endif %} <input type="submit"> </form> </body> </html>
article_page.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{{ article.title }}</title> </head> <body> <h1>{{ article.title }}</h1> <br> <h3>{{ article.content }}</h3> <br/> <a href="{% url 'blog:art_edit' article.id %}">modify</a><br><a href="{% url 'blog:menu' %}">back</a> </body> </html>
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title> 我的博客 </title> </head> <body> <h1>我的 Blog</h1> {% for article in articles %} <a href="{% url 'blog:art_page' article.id %}">{{ article.title }}</a> <br> {% endfor %} <br> <a href="{% url 'blog:art_edit' 0 %}">创建新文章</a> </body> </html>
明天写个总结
相关文章推荐
- Python学习笔记23:Django构建一个简单的博客网站(一个)
- Django学习笔记--第一天--搭建一个简易博客
- [置顶] 【第三部分-django论坛从搭建到部署】一个完整的Django入门指南学习笔记
- django学习笔记---结合cookie,onchange事件写出一个分页
- 菜鸡的Django学习笔记(二)如何创建第一个博客页面
- Django学习笔记1 启动及配置一个Django项目
- django学习笔记【001】django版本的确定&创建一个django工程
- java se 学习笔记 之 reflection(完成一个对象copy的demo)4
- 转载一个不错的Scrapy学习博客笔记
- Django 开发学习笔记(2)- 请求一个自定义的路径,得到一个返回
- python Django 学习笔记(二)—— 一个简单的网页
- [置顶] 【第一部分-django论坛从搭建到部署】一个完整的Django入门指南学习笔记
- Django学习笔记2:一个简单的开发实例
- 第十三周学习笔记(编辑器选错了重发了这一个 原博客的确周天晚上提交了orz)
- Django学习笔记之博客开发(一)
- Django学习笔记之博客开发(三)
- Node.js 学习笔记--- (2)创建一个简单的博客工程
- pygame学习笔记(6):完成一个简单的游戏
- 菜鸡的Django学习笔记(四)博客应用学习总结
- django学习笔记二:一个项目多个App项目搭建