python django搭建一个简易博客的解析(按照文件顺序逐一讲解)

上次讲解了一下各py文件的内容,但比较乱,所以这次整理了一个顺序版。

源代码请在http://github/Cheng0829/mysite自行下载

mysite:

db.sqlite3:数据库文件。在cmd输入python manage.py migrate连接数据库时生成(migrate:迁移)。

manage.py:在cmd输入django-admin startprojectmysite创建django项目时,manage.py会被自动生成在项目根目录下.用以对django项目实现命令行操作.

mysite/blog:

pycache:在__pycache__文件夹下存放的是各py文件预编译形成的pyc二进制文件

migrations:文件夹下是在cmd输入python manage.py makemigrations生成的简历文件,内含mysite主要内容。

templates:文件夹下放置index.html模板文件,用于显示页面。

{% for blog in blog_list %}
         <h>{{ blog.title }}</h2>
         <p>{{ blog.timestamp }}</p>
         <p>{{ blog.body }}</p>
{% endfor %}

是Django的模板语言
渲染变量使用双大括号{{ }},渲染标签则使用双大括号{% %}

{% for i in blog_list %} # blog_list 为后端传递给模板的变量,类似于字典推导。
<p>{{blog.XXX }}</p> #输出blog.XXX,<h2>把字体加粗,然后加大到2号(数字越小字越大,<h>为正常)
{% endfor %} #使用endfor来表示循环结束

models.py:
models.py是blog应用的核心文件之一,是定义blog数据结构的地方

from django.db import models
class BlogsPost(models.Model):
    title=models.CharField(max_length=120)
    body=models.TextField()
    timestamp=models.DateTimeField()

XXXField:字段类型(Field types)

CharField:
class CharField(max_length=None,[**options])
它是一个字符串字段,对小字符串和大字符串都适用。对于更大的文本,应该使用TextField 。
CharField 有一个必须传入的参数:max_length,字段的最大字符数。

DateTimeField
class DateTimeField([auto_now=False, auto_now_add=False, **options])
该字段利用 datetime.datetime 实例表示日期和时间。

TextField
class TextField([**options]) #用于处理大文本字段,理论上可无限。

admin.py

from django.contrib import admin
from blog.models import BlogsPost
class BlogsPostAdmin(admin.ModelAdmin):
    list_display = ['title', 'body', 'timestamp']
admin.site.register(BlogsPost, BlogsPostAdmin)

建立blogpostadmin类,并用register方法使之与blogpost连接,信息一一对应。
其中,django.contrib包:是一个强大的功能包,是Django的标准库。其中有
admin : 自动化的站点管理工具,和auth : Django的用户验证框架。

app.py:

from django.apps import AppConfig
class BlogConfig(AppConfig):
    name = 'blog'

django的project由多个app组成。project的设置由setting指定,而每个app的设置由AppConfig类指定。
AppConfig的属性有:
1.通过__init__初始化的属性:
name:app的路径名
module:app的模块
2.通过继承AppConfig的自定义类属性.

views.py:

    from django.shortcuts import render
    from blog.models import BlogsPost
    # Create your views here.
    def blog_index(request):
        blog_list = BlogsPost.objects.all()
        return render(request,'index.html', {'blog_list': blog_list})

其中blog_list = BlogsPost.objects.all()的作用是从数据库获取所有该类对象,即获取所有数据。
render方法可接收三个参数,一是request参数,二是待渲染的html模板文件,三是保存具体数据的字典参数。它的作用就是将数据填充进模板文件,最后把结果返回给浏览器

mysite/mysite:

wsgi.py:
#WSGI,全称’’Python Web Server Gateway Interface’’,意为PythonWeb服务器网关接口,是Python应用程序或框架和Web服务器之间的一种接口,WSGI没有官方的实现, 因此WSGI更像一个协议. 只要遵照这些协议,WSGI应用(Application)都可以在任何服务器(Server)上运行。

从Django的角度看,一个页面具有三个典型的组件:
1.模板(model):模板负责把传递进来的信息显示出来。
2.视图(view):视图负责从数据库获取需要显示的信息。
3.URL模式:它负责把收到的请求和你的视图函数匹配,有时候也会向视图传递一些参数。

urls.py:

from django.conf.urls import url
from django.contrib import admin
from blog import views
urlpatterns = [
    url('admin/', admin.site.urls),
    url(r'^blog/$',views.blog_index,name='index'), 
]

其中,r’^blog/$’表示地址为127.0.0.1:8000/blog,views.blog_index是引用views中的blog_index函数,利用html文件,name =‘index’则说明利用的是index.html文件。
源代码请在http://github/Cheng0829/mysite自行下载

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值