Django基础

Django基础篇

目录

  1.什么是django

  2.MVC和MTV

  3.下载、安装、部署Django2.x

  4.Django之urls模块(路由分发)

  5.Django之views模块(视图)

  6.Django之模板

 

什么是django

  Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,模板T和视图V。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。

  所谓应用框架,就是大神们用编程语言写好的一个架子,相当于一个人有骨头,有肉,人家给了你一副骨骼,至于你想制作什么样的人,你就给骨骼上对应地方添加修改即可。

  Django对比Flask框架特点:Django大而全、Flask:小而精。

  Django 框架的核心组件有:

  1. 用于创建模型的对象关系映射
  2. 为最终用户设计的完美管理界面
  3. 一流的 URL 设计
  4. 设计者友好的模板语言
  5. 缓存系统。

 

 MVC和MTV

  著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层;他们之间以一种插件似的,松耦合的方式连接在一起。

模型负责业务对象与数据库的对象(ORM),视图负责与用户的交互(页面),控制器(C)接受用户的输入调用模型和视图完成用户的请求。

主要目的:分离视图(View)和模型(Model),MVC有单独的业务逻辑层面。

  1. Model(模型)表示应用程序核心(比如数据库记录列表)。
  2. View(视图)显示数据(数据库记录)。
  3. Controller(控制器)处理输入(写入数据库记录)。

                   

  Django的MTV模式本质上与MVC模式没有什么差别,也是各组件之间为了保持松耦合关系,只是定义上有些许不同,Django的MTV分别代表:

  1. Model(模型):负责业务对象与数据库的对象(ORM)
  2. Template(模版):负责如何把页面展示给用户
  3. View(视图):负责业务逻辑,并在适当的时候调用Model和Template

怎样区分是MVC该是MTV呢?总而言之一句话,逻辑代码写在了views视图中的即是MTV

 

下载、安装、部署Django2.x

方式1:

  直接通过pycharm安装

方式2:

  通过pip下载安装--pip install Django

  下载安装成功后,即可创建一个Django项目,如下:

  

创建一个Django项目

  • django-admin project (project_name)
    • manage.py : 与django进行交互的命令脚本。
 
  项目与应用说明
  1. 一个项目有多个应用
  2. 一个应用可以被多个项目拥有
 Django项目创建全流程:
  1. 创建一个项目:django-admin startproject project_name
  2. 创建一个django应用: python manage.py startapp appname
  3. 启动项目:python manage.py runserver IP:PORT
  4. 创建ORM对应表关系:python manage.py makemigrations
  5. 创建对应的库表:python manage.py migrate

Django框架核心模块

  1. models : 与数据库交互文件
  2. views : 存放视图函数的
  3. setting:存放配置文件
  4. urls:设置页面访问路径
注意!Django2.x版本部分开发环境原因,可能要手动设置templates目录路径(在setting模块下设置)

 

Django之urls模块(路由分发)

  功能:客户端访问URL的路径与视图函数一一映射
 urls模块导入内容如下:
  from django.contrib import admin
  from django.conf.urls import url
  from django.urls import path,re_path
  from blog.views import *
  (url使用方式和re_path一样)
  url后面会跟上对应的视图函数,其原理是,用户访问一个url时,会找到对应的服务器对,然后服务器收到请求后,将信息反馈给对应的web应用,web应用在将收到的信息确认后,发送相关数据转给服务器封装后发给客户端,因此这里url指定的views是做对应的处理流程。

  

urlpatterns = [
    path('admin/', admin.site.urls),
    path(r'timer/', show_time),
    # 查看博客 url模块前面输入的就是路径匹配原则
    # 这里说的以2004开头
    # 说白了调用了url模块,输入的路径就是以正则为基础
    url(r'^2004/$', year_2004),
    # 使用分组匹配后,系统会将分组的内容传递给year这个视图函数!
    # 所以,视图函数要加一个形参
    url(r'^(\d{4})/$', year)
]

views视图如下:

从上面能看出,我能用正则表达式过滤出我想要的年月日信息,但是如果我一旦过滤的信息变了,我想过滤其他的,那么是不是就要修稿正则,而且正则匹配相对比较麻烦,取出的数据还是char,此时我们提出了path。(与url一样,滤出的数据,需要用参数接收)
urlpatterns = [  
    path('articles/2003/', views.special_case_2003),  
    path('articles/<int:year>/', views.year_archive),  
    path('articles/<int:year>/<int:month>/', views.month_archive),  
    path('articles/<int:year>/<int:month>/<slug>/', views.article_detail),  
]  

  

得出,path能直接提取出int,而且面向数字类型的不用像正则一样修改匹配规则.

 

URL别名:
  起别名的目的就是为了防止URL模块中如果路径发生变化,导致所有与URL路径有关的东西都要变化的问题。例如:
 
路由分发
向server端传参数数方式:
(1)通过数据:
(2)通过路径:

 

 

Django之views模块(视图)

1.基础使用方法

  def 函数名 (request):
  return HttpResponse("")
  一定有一个请求对象request
   
def show_time(request):
    import datetime
    t = datetime.datetime.now()
    return HttpResponse("<h1>it is %s</h1>" %(str(t)))
HttpResponse用于返回字符串

# return常用返回方法如下
 # HttpResponse -----返回字符串(可以使中文)
 # render ------模板渲染
 # redirect ------跳转
# request.method   # 请求方式
# request.GET     # 存放GET请求数据
# request.POST    # 存放POST数据
  render语法:
  render(request,"html文件",{key:value})
 
render和redirect的区别:
  render是对页面做渲染,redirect是进行页面跳转。
 

Django之模板

1.什么是模板
  模板是一种语言,其主要用于前后端进行数据交互,例如渲染变量 {{}}。
  总结:模板就是HTML+模板代码(ps:只要有逻辑代码——标签就是一个模板)

后端给前端传值,单个变量,以字典方式传输,如上图,如果传输所有变量,则使用locals()

 

2.模板语法
<!--模板语法及如何取出后端传递的变量--!>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>Hellow World for {{ name }}</h1>
    <h2>Hellow World for {{ i }}</h2>
    <h2>Hellow World for {{ l }}</h2>
    <h2>Hellow World for {{ d }}</h2>
    <hr>
    <h3>深度查询:句点号 .
        <p>{{ l.0 }}</p>
        <p>{{ l.1 }}</p>
        <p>{{ l.2 }}</p>
        <hr>
        <p>字典取值: </p>
        <p>{{ d.name }}</p>
        <p>{{ d.age }}</p>
        <hr>
        <p>locals取出本地所有变量</p>
        <p>单个取出<br>
            {{ query.0.name }}
        </p>

        <p>循环取出
            {% for person in query %}
                <p>{{ person.name }}</p>
            {% endfor %}
        </p>
        <hr>
        <p>
            判断语句<br>
            {% if i > 100%}
                <p>i大于100</p>
            {% else %}
                <p>i小与等于100</p>
            {% endif %}
        </p>
    </h3>

</body>
</html>

 

{{变量|filter:参数}} # filter是过滤条件
取模板标签
{% TAG %}
 
模板使用for循环
{% for i in 变量%}
{% endfor %}
  
  
 
posted @ 2018-06-11 16:49  成长的网工  阅读(102)  评论(0)    收藏  举报