Python+Django搭建个人博客(3)-Django视图
Django视图和网址
-
python manage.py runserver
当我们运行这条命令时,会提示:
You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
参照它的提示,运行
python manage.py migrate
,当运行完这个命令之后,可以看到my_blog文件夹下多了db.sqlite3
这个文件,相当于网站的基本数据的数据库 -
新建一个Django App
-
在命令行中进入到django项目的文件夹,输入
python manage.py startapp blog
-
完成后多处一个
blog
文件夹
-
-
将App添加到setting.py里
- 在Djingo项目文件夹中有一个和当前项目同名的文件夹中有一个
setting.py
文件,在INSTALLED_APPS
添加一个blog
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog', ]
- 在Djingo项目文件夹中有一个和当前项目同名的文件夹中有一个
Django的MTV模式
Brower -- 浏览器;URL -- 网址;View -- 视图;Model -- 模型;Database -- 数据库;Template -- 模版
视图
- 编写视图函数
-
打开
blog/views.py
文件,默认界面如下:image
-
编写
views.py
,添加如下语句:from django.shortcuts import render from django.http import HttpResponse # 定义一个index函数处理主页的访问请求,request包含了用户的浏览器传来的HTTP请求内容 def index(request): # 用HttpResponse函数直接返回一段文字给用户 return HttpResponse("欢迎来到我的博客 ")
-
网址
-
创建
urls.py
- 在blog文件夹下创建一个新文件
urls.py
,用于处理网址的解析 - 编写
urls.py
,添加以下内容from django.urls import path from . import views urlpatterns = [ path('',views.index,name='index'), ]
- 在blog文件夹下创建一个新文件
-
项目的
urls.py
-
在
my_blog
文件下有urls.py
,跟blog
文件夹下创建一个新文件urls.py
不是同一个,区别在于blog文件夹下的urls.py
是管理blog系统的网址,my_blog
文件下有urls.py
是管理整个项目的地址 -
打开
my_blog/urls.py
image
表示配置了ip:port/admin
的网址,我们访问一下,启动服务python3 manage.py runserver
后,访问http://127.0.0.1:8000/admin
,可以看到是一个管理员登录界面image
-
-
创建一个管理员账号
-
在项目根目录上运行
python manage.py createsuperuser
-
输入username
-
输入Email address
-
输入password ,不显示的,盲打
image
-
-
用管理员账户登录后台
-
运行
python manage.py runserver
-
浏览器中打开
http://127.0.0.1:8000/admin
,输入username和password登录image
-
点击user,可以管理现有用户的相关信息、权限
image
image
-
-
配置项目的
urls.py
-
修改为:
from django.contrib import admin # 添加一个include from django.urls import path,include urlpatterns = [ path('admin/', admin.site.urls), # 当网址是/blog时,交给blog.urls去处理 path('blog/',include('blog.urls')), ]
-
运行
python manage.py runserver
,访问http://127.0.0.1:8000/blog/
,出现了在view里写的那句话:
image
-
梳理一下此处的流程
项目的
urls.py
文件中配置了path('blog/',include('blog.urls'))
,表示当网址为http://ip:port/blog/
的时候,会去找blog中的urls.py
文件,文件中配置了path('',views.index,name='index')
,表示网址''
,即blog/
后面没有内容时这个网址,去找views.py
中的index函数,返回了index的return,即我们所见的内容,欢迎来到我的博客
-
-
更复杂的网址处理
-
修改blog文件中的
urls.py
,添加一行path('<int:blog_id>',views.blog_detail,name='blog_detail')
-
'<int:blog_id>'
表示这段网址是个数字,存在blog_id这个变量 -
在
views.py
添加一个blog_detail的函数,重启服务,效果如下:def blog_detail(request,blog_id): return HttpResponse("这是我的第{}篇博客".format(blog_id))
image
-
不同类型的变量,参考:
image
-
作业
拓展:SEO
- SEO ,Search Engine Optimization,搜索引擎优化
- 网址对SEO的影响
-
http://xxx.com/agency-everyday-economy-20180629
这个写法优于上一个网址,因为看到网址就知道是什么内容的东西
-
这个网址就完全不知道会是什么内容,SEO很差
- 所以在设计网址时,要对这方面进行考虑
- 复杂网址演示
- 修改blog文件中的
urls.py
,添加一行path('<slug:blog_title>',views.blog_title,name='blog_title')
- 在views.py中新增对应的函数
def blog_title(request,blog_title): return HttpResponse("这是我的标题为{}的博客".format(blog_title))
-
效果如下:
image
- 修改blog文件中的