Django采用了MVC的软件设计模式,即模型M,视图V和控制器C。
dir查看当前目录
3.pycharm打开该项目
项目目录介绍:
manage.py:项目管理器 与项目进行交互的命令行工具集的入口
执行python mange.py来查看所有命令
myblog目录:项目的一个容器,包含项目的一些配置,不建议修改该目录名
wsgi.py:
urls.py
Settings.py:项目的总配置文件
# os模块就是对操作系统进行操作,使用该模块必须先导入模块:
import os
# 项目的根目录
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
4.运行项目localhost:9999 python manage.py runserver 9999
应用目录介绍
编写index hello world页面
1.Views.py:
# 引入HttpResponse模块
from django.http import HttpResponse
# Create your views here.
def index(request):
return HttpResponse('hello world!')
2.url.py
from blog.views import bv
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', bv.index),
]
Url配置
1.urls.py
#include
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', include('blog.urls'))
]
2.blog应用urls.py
from django.urls import path
# 从当前模块 引入views
from . import views
urlpatterns = [
path('home/', views.index),
path('page/', views.page)
]
3.Views.py
# 引入HttpResponse模块
from django.http import HttpResponse
# Create your views here.
def index(request):
return HttpResponse('hello world!')
def page(request):
return HttpResponse('我是page!')
渲染templates index.html页面 Index.html {{data1}} {{data2}}
# 渲染template页面
def html(request):
# render(request参数,html页面,字典数据)
return render(request, 'index.html', {'data1': '模板数据1', 'data2': '模板数据2'})
class Article(models.Model):
# 设置admin管理系统数据默认显示名称
def __str__(self):
return self.title
注意:python3 url已废弃改用path 正则使用re_path 如下:
# (?P正则表达式) name为这个组的别名 可以通过这个别名提取分组
# 别名article_id与响应函数views.detail中的参数article_id保持一致
re_path(r'^article/(?P[0-9]+)$', views.detail)
超链接配置:
1.根目录urls.py include()第二个参数设置namespace=’blog’ 参数
path('blog/', include('blog.urls', namespace='blog'))
2.blog应用下的urls.py
app_name = 'blog'
urlpatterns = [
re_path(r'^article/(?P[0-9]+)$',views.detail, name='article_page')
]
3 .html中
= {% url ‘app_name:url_name’ parame %}
{{ article.title }}
Views.py: 表单提交操作
def add_action(request):
# 获取前端传递过来的文章标题和内容
title = request.POST.get('title', 'Title')
content = request.POST.get('content', 'content')
# 向Article表中插入一条数据l
models.Article.objects.create(title=title, content=content)
# 返回首页
articles = models.Article.objects.all()
return render(request, 'index.html', {'articles': articles})
表单页面:{% csrf_token %} post提交的防止python拒绝的标识 {% csrf_
编辑博客和新增博客页面共用: 思路修改时文章id是从1开始的,新增id为0
可以以此来判断
编辑时操作数据库时 先通过id获取该文章对象 然后通过对象的属性修改值 最后执行save()方法
{# django 模板会将不存在的值设置为空值 article.id等为空字符串 #}
更多过滤器用法请前往django admin官方文档了解
admin.py:
from django.contrib import admin
# Register your models here.
# 配置admin后台管理系统能操作该应用数据库
from . import models
# 创建Admin配置类 增强admin 可以调整admin后台的一些显示
class ArticleAdmin(admin.ModelAdmin):
# list_display显示其他字段 支持列表、元组
list_display = ('id', 'title', 'content', 'create_time')
# 过滤器
list_filter = ('create_time',)
# 注册
admin.site.register(models.Article, ArticleAdmin)
token %
} post
的防止python拒绝的标识
path('blog/', include('blog.urls', namespace='blog'))