【django】第一章:简单的博客系统(重新实现)

第一章:简单的博客系统

目录

第一章:简单的博客系统

1.  创建project

2.  创建app,添加app

   2.1 创建app

   2.2 添加app

3. 创建model,自动导入到数据库表db.sqlite3中

3.1 创建数据类型class

3.2 将该数据类型migrate到数据库SQLite文件里 

3.3 在admin界面中增删改查数据库:

4. MTV模式,开发app的html页面


1.  创建project : mysite

django-admin startproject mysiteV1_1

python manage.py runserver可以查看http://127.0.0.1:8000/ 界面


2.  创建app : blog,添加app

   2.1 创建app : blog

python manage.py startapp blog

   2.2 添加app

setting.py:  将创建的app添加到setting.py中的INSTALLED_APPS字段中

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',
]

 

mysite/setting.py:另外可以设置语言、设置时区、设置调试模式

语言:zh-hans表示 中文-汉语-简体S: Simplified 简体字

           zh-hant表示 中文-汉语-繁体T: Tranditional 繁体字

时区:UTC :协调世界时

           Asia/Shanghai:中国大陆与UTC的时差均为+8,也就是UTC+8

LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'

3. 创建数据模型类class,自动导入到数据库表db.sqlite3中

(方法 : 创建model类,迁移到数据库)

(本质:通过写python文件的方式,自动创建数据库表字段,不需要了解SQL语言)

3.1 创建模型数据类class

blog/model.py:创建类class各字段

模型:字段属性类
字符字段:
# TextField()  保存字符串长度是无限制的,通常用于保存较大文本
# CharField(max_length=300) 保存字符串,使用时一定要声明字符串的长度 参数“max_length”
  例:phone = models.CharField(max_length=20, blank=True, null=True)
                          null是针对数据库而言,如果null = True, 表示数据库的该字段可以为空。 
                          blank是针对表单的,如果blank = True,表示你的表单填写该字段的时候可以不填
时间字段:
# DataTimeField() 包括Date日期和Time时间 常用参数“auto_now_add”     
  DateField() 只有Date日期没有Time时间

关系字段:一对一OneToOneField、一对多ForeignKey、多对多ManyToMany
# 一对多 
  例:author = models.ForeignKey(User, related_name="blog_posts")  
      一个User可以对应多篇文章作者 
      即一个User可以用好多遍
# 一对一 
  例:user = models.OneToOneField(User, unique=True) 
      一个User只能设置一遍用户信息  
class BlogArticles(models.Model):
    title = models.CharField(max_length=300)
    author = models.ForeignKey(User, related_name="blog_posts")
    # related_name="blog_posts"作用是允许User反向查询到BlogArticles
    body = models.TextField()
    publish = models.DateTimeField(default=timezone.now)

    class Meta:
        ordering = ("-publish",)

    def __str__(self):
        return self.title

3.2 将该数据类型migrate到数据库SQLite文件里 

可以在SQL等数据库中创建与models.py代码对应的表,不需要自己手动执行SQL。

根据 数据模型models.py 自动建立 数据库表db.sqlite3

python manage.py makemigrations    # 根据model.py自动生成0001_initial.py生成migration类

python manage.py migrate                   将生成的py文件真正应用到数据库

3.3 在admin界面中增删改查数据库:

法1:通过django自带的admin工具实现app数据库增删改查

         3.3.1 创建超级管理员Donett

                   python manage.py createsuperuser

         3.3.2 在admin.py增加数据库模型

                   admin.site.register(BlogArticles)

         3.3.3 启动网页服务即可增删改查

                   python manage.py runserver可以在http://127.0.0.1:8000/admin/ 超级用户界面增删改查博客文章


4. MTV模式,开发app的html页面

输入域名

urls正则表达式比对该域名是否有对应哪个views视图函数

views视图函数里,说明了用html模板文件展示,需要传入什么键值对数据

 

model.py         创建数据库的字段

admin.py         import该类到当前环境中,将该类注册到admin中

templates        存放html模板文件:模板文件,继承文件

views.py          决定使用哪个html模板,向该模板渲染什么数据

urls.py             获取urls链接中的数据,传给参数

可以在http://127.0.0.1:8000/blog/ 界面,增删改查博客文章

可以在http://127.0.0.1:8000/blog/1    界面,增删改查博客文章

 

model.py

from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone
class BlogArticles(models.Model):
    title = models.CharField(max_length=300)
    author = models.ForeignKey(User, related_name="blog_posts")
    body = models.TextField()
    publish = models.DateTimeField(default=timezone.now)

    class Meta:
        ordering = ("-publish",)

    def __str__(self):
        return self.title

 

admin.py

from .models import BlogArticles
admin.site.register(BlogArticles)

templates文件夹

      title.html:

模板语法:由views视图函数 传入html模板 进行渲染的键值对参数,需要用 块标签 变量标签的语法

  • 块标签{}

 {% for this in blogs %

 {% endfor %}

{% if condition%}

{% else %}

{% endif %}

  • 变量标签

 {{ this.titile }}

            {article.body }}

views.py 

决定使用哪个html模板,向该模板渲染什么数据

例:

value = BlogArticles.objects.all()

render(request, "titles.html", {"blogs":value})

即:使用titles.html模板,渲染blogs这个数据

参数1:html文件

参数2:contexts键值对        {“键”:值, “键”:值, }

                          键:在html中要使用的变量

                          值:视图函数view中确定的值

def blog_title(request):
    blogs = BlogArticles.objects.all()
    return render(request, "titles.html", {"blogs":blogs})
def blog_content(request, article_id):
    article = BlogArticles.objects.get(id=article_id)
    return render(request, "content.html", {"article": article, "publish": article.publish})

urls.py

urlpatterns = [
    url(r'^$', views.blog_title, name="blog_title" ),
    url(r'(?P<article_id>\d)/$', views.blog_content, name="blog_detail")
]

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值