您的位置:首页 > 编程语言 > Go语言

菜鸡的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>


明天写个总结
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息