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',
    ]
    

Django的MTV模式

image

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'),
      ]
      
  • 项目的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('',views.blog_detail,name='blog_detail')

    • ''表示这段网址是个数字,存在blog_id这个变量

    • views.py添加一个blog_detail的函数,重启服务,效果如下:

      def blog_detail(request,blog_id):
          return HttpResponse("这是我的第{}篇博客".format(blog_id))
      
      image
    • 不同类型的变量,参考:

      image

作业

image

拓展:SEO

  • SEO ,Search Engine Optimization,搜索引擎优化
  • 网址对SEO的影响
    • http://xxx.com/zhongjie-everydayjingji-20180629

    • http://xxx.com/agency-everyday-economy-20180629

      这个写法优于上一个网址,因为看到网址就知道是什么内容的东西

    • http://xxx.com/blog/1

      这个网址就完全不知道会是什么内容,SEO很差

  • 所以在设计网址时,要对这方面进行考虑
  • 复杂网址演示
    • 修改blog文件中的urls.py,添加一行path('',views.blog_title,name='blog_title')
    • 在views.py中新增对应的函数
          def blog_title(request,blog_title):
              return HttpResponse("这是我的标题为{}的博客".format(blog_title))
      
    • 效果如下:


      image

你可能感兴趣的:(Python+Django搭建个人博客(3)-Django视图)