Django+Python+Bootstrap 实践 2

Django+Python+Bootstrap 实现简单的博客页面

  • 模型层

    • 模型层是什么?
      • 位于Django视图层和数据库之间的组件,Python对象和数据库表之间的转换
    • 为什么需要模型层?
      • 屏蔽不同数据库之间的差异,开发者更加专注于业务逻辑的开发,提供很多便捷工具有助于开发
    • 模型层的配置?
      • settings.py文件上,重点关注DATABASE的配置:‘ENGINE’意思是指数据库用的是哪一个数据库的驱动;‘name’是指数库的名字+文件名,是数据库对应文件夹和文件名。
  • 创建模型

    • 模型层定义字段
      • 数据类型:IntegerField
      • 文本类型:TextField
      • 日期类型:DateTimeField
      • 自增:AutoField
      • 主键:primary_key
      • 外键:ForeignKey
    1. 设计数据库字段,在应用层models.py文件中设置表,字段,主键
    from django.db import models
    
    
    class Article(models.Model):
        # 文章的唯一ID
        article_id = models.AutoField(primary_key=True)
        # 文章的标题
        title = models.TextField()
        # 文章的摘要
        brief_content = models.TextField()
        # 文章的主要内容
        content = models.TextField()
        # 文章的发布时间
        publish_date = models.DateTimeField(auto_now=True)
    
    1. 创建迁移字段,运行命令 python manage.py makemigrations
    2. 迁移字段 python manage.py migrate
  • Django Admin

  1. 创建管理员账户
    python manage.py createsuperuser
  2. 运行项目,输入http://127.0.0.1:8000/amdin,进入后台,使用账户登陆。
  3. 打开应用admin.py文件,添加admin.site.register(Article)进行注册。
  4. 后台查看/编辑自己创建的博客内容。
  5. 显示文章标题,打开models.py,添加如下代码
    from django.db import models
    
    
    class Article(models.Model):
       # 文章的唯一ID
       article_id = models.AutoField(primary_key=True)
       # 文章的标题
       title = models.TextField()
       # 文章的摘要
       brief_content = models.TextField()
       # 文章的主要内容
       content = models.TextField()
       # 文章的发布时间
       publish_date = models.DateTimeField(auto_now=True)
       
       # 新增的显示标题代码
       def __str__(self):
           return self.title
    
  • django模板系统基本语法

    变量标签 {{variable_name}}

    for循环标签 {%for x in list %},{% endfor %}
    if-else标签 {% if %},{%.else %},{% endif %}

  • Bootstrap 渲染博客页面
    在项目templates文件夹下新建blog文件夹,在blog文件夹下创建index.html和detail.html文件。

    编写index.html文件

    <!DOCTYPE html>
    		<html lang="en">
    		<head>
    		    <meta charset="UTF-8">
    		    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    		    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"
    		          integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    		    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    		    <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"
    		            integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
    		            crossorigin="anonymous"></script>
    		    <title>学习Django框架</title>
    		</head>
    		<body>
    		<div class="container page-header">
    		    <h1>学习Django框架
    		        <small> —— By DBJ开发</small>
    		    </h1>
    		</div>
    		<div class="container page-body">
    		    <div class="col-md-9" role="main">
    		        <div class="body-main">
    		            {% for article in article_list %}
    		                <div>
    		                    <h2> <a href="/blog/detail/{{ article.article_id }}">{{ article.title }}</a></h2>
    		                    <p>
    		                        {{ article.brief_content }}
    		                    </p>
    		                </div>
    		            {% endfor %}
    		
    		
    		        </div>
    		
    		    </div>
    		
    		    <div class="col-md-3" role="complementary">
    		        <div>
    		            <h2> 最新文章</h2>
    		            {% for article in article_list %}
    		                <h4><a href="/blog/detail/{{ article.article_id }}"> {{ article.title }}</a></h4>
    		            {% endfor %}
    		
    		        </div>
    		
    		    </div>
    		</div>
    		</body>
    		</html>
    

    编写detail.html文件

    <!DOCTYPE html>
    			<html lang="en">
    			<head>
    			    <meta charset="UTF-8">
    			        <html lang="en">
    			        <head>
    			            <meta charset="UTF-8">
    			            <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    			            <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"
    			                  integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
    			                  crossorigin="anonymous">
    			            <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    			            <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"
    			                    integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
    			                    crossorigin="anonymous"></script>
    			            <title>{{ current_article.title }}</title>
    			        </head>
    			<body>
    			<div class="container page-header">
    			    <h1>{{ current_article.title }}
    			    </h1>
    			</div>
    			<div class="container body-main">
    			    <div>
    			        <p>
    			            {% for section in section_list %}
    			              {{ section }}
    			            {% endfor %}
    			        </p>
    			    </div>
    			</div>
    			</body>
    			</html></title>
    			</head>
    			<body>
    			
    			</body>
    			</html>
    

    编写视图views.py文件

    	    # index
    def get_index_page(request):
       	    all_article = Article.objects.all()
       	    return  render(request, 'blog/index.html',
       	                   {
       	                       'article_list': all_article
       	                    }
       	                   )
       	
       	# detail
    def get_detail_page(request, article_id):
       	    all_article = Article.objects.all()
       	    current_article = None
       	
       	    for article in all_article:
       	        if article.article_id == article_id:
       	            current_article = article
       	            break
       	    section_list = current_article.content.split("\n")
       	    return  render(request, 'blog/detail.html',
       	                   {
       	                       'current_article': current_article,
       	                       'section_list': section_list
       	                    }
       	                   )
    

    注意blog/index.html路径名字和你前面建的文件名字对应,项目默认会去找templates文件。

    打开应用urls.py文件添加路由

    path(‘index’, blog.views.get_index_page),
    path(‘detail/int:article_id’, blog.views.get_detail_page)

运行项目

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值