Django框架02 /Django下载安装、url路由分发

1. django下载安装

  • 下载Django:

    pip3 install django==1.11.9
    pip3 install django==1.11.9 -i http://xxxxxx # 指定源
  • 创建一个django project

    django-admin startproject mysite
    # 创建了一个名为"mysite"的Django 项目
  • 创建的项目文件介绍

    1.manage.py ----- Django项目里面的工具,通过它可以调用django shell和数据库,启动关闭项目与项目交互 等,不管你将框架分了几个文件,必然有一个启动文件,其实他们本身就是一个文件。
    2.settings.py ---- 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。
    3.urls.py ----- 负责把URL模式映射到应用程序。
    4.wsgi.py ---- runserver命令就使用wsgiref模块做简单的web server,后面会看到runserver命令,所有与 socket相关的内容都在这个文件里面了,目前不需要关注它。
  • 运行项目

    1.python manage.py runserver 127.0.0.1:8080
    # 此时已经可以启动django项目了,只不过什么逻辑也没有
    2.通过指令运行项目的时候,可以不写ip地址,如果不写,默认是127.0.0.1
    python manage.py runserver 8080    
    3.如果连端口都不写,默认是8000端口
    python manage.py runserver
  • 在mysite目录下创建应用

    python manage.py startapp blog   
    
    # 通过执行manage.py文件来创建应用,执行这句话一定要注意,你应该在这个manage.py的文件所在目录下执行这句话,因为其他目录里面没有这个文件
    # 每个应用都有自己的目录,每个应用的目录下都有自己的views.py视图函数和models.py数据库操作相关的文件
  • 应用目录介绍

    models.py :之前我们写的那个名为model的文件就是创建表用的,这个文件就是存放与该app(应用)相关的表结构的
    views.py :存放与该app相关的视图函数的

2. pycharm创建项目

  • 示例图1:新建项目

  • 示例2:项目名称/app名称

  • 示例3:django项目目录

  • 示例图4:运行

3. 基于Django实现一个简单的示例

  • 用户输入网址-->路径-->函数-->返回数据(文件)
  1. url控制器(第一步就找它)

    django 1.11.9版本的url写法:
    from django.conf.urls import url
    from django.contrib import admin
    from crm import views
    urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', views.index),
    ] # 下面是django2.x版本的url写法,不太一样了,
    # 但是兼容1.x的,不过我们现在还是主要说1.xx版本的,
    # 所以写url的时候按照上的方式写。
    from django.contrib import admin
    from django.urls import path # 找对应的函数,是哪个app里面的函数
    from app01 import views urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/',views.index),
    ]
  2. 视图

    from django.shortcuts import render,HttpResponse
    
    # 逻辑和返回数据
    def index(request): import datetime
    now=datetime.datetime.now()
    ctime=now.strftime("%Y-%m-%d %X")
       # return HttpResponse('哈哈,好玩吗?')
    return render(request,"index.html",{"ctime":ctime})
    # render,渲染html页面文件并返回给浏览器
  3. 模板

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body> <h4>当前时间:{{ ctime }}</h4> </body>
    </html>
  4. 在settings配置文件里面有关于templates(放html文件的配置)

    TEMPLATES = [
    {
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, 'templates')] #有些版本的django没有写这个,自己写一下,就是配置一个django找html文件的路径,render方法就来这里找html文件
    ,
    'APP_DIRS': True,
    'OPTIONS': {
    'context_processors': [
    'django.template.context_processors.debug',
    'django.template.context_processors.request',
    'django.contrib.auth.context_processors.auth',
    'django.contrib.messages.context_processors.messages',
    ],
    },
    },
    ]
    MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ] # 如果发post或者其他请求的时候,csrf认证会拦截请求

4. url配置

  • 本质是URL与要为该URL调用的视图函数之间的映射表
  1. 基本格式

    from django.conf.urls import url
    urlpatterns = [
    url(正则表达式, views视图函数,参数,别名),
    ] #注意:循环urlpatterns,找到对应的函数执行,匹配上一个路径就找到对应的函数执行,就不再往下循环了,并给函数传一个参数request,和wsgiref的environ类似,就是请求信息的所有内容
    • 参数说明 

      1. 正则表达式:一个正则表达式字符串

      2. views视图函数:一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串

      3. 参数:可选的要传递给视图函数的默认参数(字典形式)

      4. 别名:一个可选的name参数
  2. 正则表达式详解

    from django.conf.urls import url
    
    from . import views
    
    urlpatterns = [
    url(r'^articles/2003/$', views.special_case_2003),
    # 如果用户想看2004、2005、2006....等,在articles后面写一个正则表达式/d{4}/就行啦
    url(r'^articles/([0-9]{4})/$', views.year_archive),
    url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
    # 如果想拿到输入的年份,并通过这个年份去数据库里面匹配对应年份的文章,分组/(\d{4})/,一个小括号搞定
    url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
    ]
  3. 注意事项:

    • urlpatterns中的元素按照书写顺序从上往下逐一匹配正则表达式,一旦匹配成功则不再继续。
    • 若要从URL中捕获一个值,只需要在它周围放置一对圆括号(分组匹配)。
    • 不需要添加一个前导的反斜杠(也就是写在正则最前面的那个/),因为每个URL都有。例如,应该是^articles 而不是 ^/articles。
    • 每个正则表达式前面的'r' 是可选的但是建议加上。
    • ^articles& 以什么结尾,以什么开头,严格限制路径
  4. 是否开启URL访问地址后面不为/跳转至带有/的路径的配置项

    APPEND_SLASH=True
    
    Django settings.py配置文件中默认没有 APPEND_SLASH 这个参数,但 Django 默认这个参数为 APPEND_SLASH = True。 其作用就是自动在网址结尾加'/'。其效果就是:我们定义了urls.py:
    
    from django.conf.urls import url
    from app01 import views
    urlpatterns = [
    url(r'^blog/$', views.blog),
    ] 1.访问 http://www.example.com/blog 时,默认将网址自动转换为 http://www.example/com/blog/ 。
    2.如果在settings.py中设置了 APPEND_SLASH=False,此时我们再请求 http://www.example.com/blog 时就会提示找不到页面。
  5. form表单是否要加前/

    目前的请求路径:<!-- http://127.0.0.1:8000/login/ -->
    1、如果action的后面的地址前面没有/ ---login2/
    请求的路径是:<!-- http://127.0.0.1:8000/login/login2/ -->
    <form action="login2/" method="get"> <!-- http://127.0.0.1:8000/login/login2/ -->
    用户名:<input type="text" name="username">
    密码:<input type="text" name="pwd">
    <input type="submit">
    </form> 2.action的后面的地址前面加上/---/login2/ 请求的路径是:<!-- http://127.0.0.1:8000/login2/ -->
    <form action="/login2/" method="get"> <!-- http://127.0.0.1:8000/login2/ -->
    用户名:<input type="text" name="username">
    密码:<input type="text" name="pwd">
    <input type="submit">
    </form>
  6. 分组命名匹配

    • 无名分组

      # 路由
      url(r'^articles/(\d+)/(\d+)/', views.articles), # articles/2019/9/ # 视图函数
      def articles(request,year,month): # 位置参数 2019 9
      print(year,type(year)) #2019 <class 'str'> # 匹配出来的所有数据都是字符串
      print(month)
      return HttpResponse(year+'年'+ month +'月' +'所有文章') # 位置参数:
      # 第一个参数接收的就是无名分组路径中匹配 到的第一个分组的数据,
      # 第二个参数接收的就是无名分组路径中匹配到的第二个分组的数据          
    • 有名分组

      
      
      # 有名分组参数
      url(r'^articles/(?P<xx>\d+)/(?P<oo>\d+)/', views.articles), # articles/2019/9/
      # xx=2019 oo=9 关键字传参 def articles(request,oo,xx): # 关键字传参 2019 9
      print(xx,type(xx)) #2019 <class 'str'> #匹配出来的所有数据都是字符串
      print(oo)
      return HttpResponse(xx+'年'+ oo +'月' +'所有文章')
    • 设置默认值

      # urls.py中
      from django.conf.urls import url
      from . import views
      urlpatterns = [  
      url(r'^blog/$', views.page),  
      url(r'^blog/page(?P<num>[0-9]+)/$', views.page),
      ]
      # views.py中,可以为num指定默认值
      def page(request, num="1"):  
      pass
    • 无名/有名分组总结:

      • 无名分组使用简单的正则表达式分组匹配(通过圆括号)来捕获URL中的值并以位置参数形式传递给视图。
      • 在更高级的用法中,可以使用分组命名匹配的正则表达式组来捕获URL中的值并以关键字参数形式传递给视图。
      • 在Python的正则表达式中,分组命名正则表达式组的语法是(?Ppattern),其中name是组的名称,pattern是要匹配的模式。

5. url路由分发之include

  • 示例代码:

    # 项目文件夹下的urls.py文件中的url写法:
    from django.conf.urls import url,include
    from django.contrib import admin
    from app01 import views
    urlpatterns = [
    # url(r'^admin/', admin.site.urls),
    # 首页
    url(r'^$', views.base), url(r'^app01/', include('app01.urls')), url(r'^app02/', include('app02.urls')), ] # app01下urls.py内容写法
    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views
    urlpatterns = [
    # url(r'^admin/', admin.site.urls),
    url(r'^$', views.app01base),
    url(r'^index/', views.index),
    ] # app02下urls.py内容写法
    from django.conf.urls import url
    from django.contrib import admin
    from app02 import views urlpatterns = [
    # url(r'^admin/', admin.site.urls),
    url(r'^$', views.app02base),
    url(r'^home/', views.home),
    ]

Django框架02 /Django下载安装、url路由分发的更多相关文章

  1. HTTP协议 django下载安装 url路由分发

    今日内容 HTTP协议 MVC和MTV框架模式 django下载安装 django的url路由分发 HTTP协议 http协议 请求信息格式 GET / HTTP/1.1 请求行 Host: 127. ...

  2. day56——http协议、MVC和MTV框架模式、django下载安装、url路由分发

    day56 昨日复习 今日内容 HTTP协议 网页:https://www.cnblogs.com/clschao/articles/9230431.html 老师整理的重点 老师整理的重点 请求信息 ...

  3. [Django框架 - 注意事项,安装,项目搭建,小白必会三板斧]

    [Django框架 - 注意事项,安装,项目搭建,小白必会三板斧] 想要正常运行django项目所需要知道的注意事项 1. 计算机名称不能有中文,不然bug在哪儿你都不知道! 2. 项目名和py文件名 ...

  4. Django框架(一)-Django初识

    Django初识 一.Web框架本质—自己实现Web框架 1.所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端 import socket sk = sock ...

  5. Django框架的前奏(安装及介绍)

    几个重要的概念: web的本质: 浏览器中输入网址敲回车发生了几件事? 1.浏览器向服务端发送请求 2.服务端接收请求 3.服务端返回相应的响应 4.浏览器接收响应  根据特定的规则渲染页面展示给用户 ...

  6. Django框架(一)—— 安装使用Django

    目录 Django入门 一.web应用 二.C/S 和B/S 架构 三.python中的web框架 四.http协议 五.URL简介 六.Django的安装和使用 Django入门 一.web应用 W ...

  7. Django框架之第三篇(路由层)--有名/无名分组、反向解析、路由分发、名称空间、伪静态

    一.Django请求生命周期 二.路由层  urls.py url()方法 第一个参数其实就是一个正则表达式,一旦前面的正则匹配到了内容,就不会再往下继续匹配,而是直接执行对应的视图函数. djang ...

  8. Django框架的使用教程--视图和路由[二]

    视图和路由 1.创建一个django_test应用 2.setting中设置django_test INSTALLED_APPS = [ 'django.contrib.admin', 'django ...

  9. Django框架 (七) Django ORM模型

    ORM简介 查询数据层次图解:如果操作mysql,ORM是在pymysq之上又进行了一层封装

随机推荐

  1. 非线性规划的Matlab 解法

    编写M 文件fun1.m 定义目标函数 function f=fun1(x); % 定义目标函数 f=sum(x.^)+; % .^2是矩阵中的每个元素都求平方.^2是求矩阵的平方或两个相同的矩阵相乘 ...

  2. 安装elasticsearch的坑

    elasticsearch启动报“此时不应有 \Common 原因 Java 环境变量出错 解决 修改 elasticsearch.bat , 添加一句 : SET params='%*' SET J ...

  3. 如何用 Python 和 API 收集与分析网络数据?

    摘自 https://www.jianshu.com/p/d52020f0c247 本文以一款阿里云市场历史天气查询产品为例,为你逐步介绍如何用 Python 调用 API 收集.分析与可视化数据.希 ...

  4. 【JMeter_07】JMeter逻辑控制器__循环控制器<Loop Controller>

    循环控制器<Loop Controller> 业务逻辑: 根据所填写的循环次数,对当前节点下的取样器进行响应次数的循环请求,这里可以填写变量.整数.小数.字母.负数.各种符号等: 当填写整 ...

  5. tp6 路由匹配参数获取问题

    tp6是一个封装度很高的框架,在大部分场景下都能做到开箱即用 本次遇到情况为,当请求消息体为索引数组时,路由参数无法正常获取 首先看正常路由匹配 路由定义 Route::post('test/:a/: ...

  6. position中的四种属性

    Position有四个属性值,分别是static .fixed. relative .absolute. 第一个属性值是static,这是position的默认属性,一般我们都不会用到它,所以也很少提 ...

  7. python-判断、循环、列表、字典

    一.如何将两个列表合并成一个字典 运用dict(zip()) 例如: usernames = ['xiaohei', 'xiaobai', 'xiaoming'] passwords = ['1234 ...

  8. idea 2018版/2019版的破解

    idea 2019版破解的穿越隧道:https://www.jianshu.com/p/09c9afae9a05 idea 2018版破解的穿越隧道:https://www.jianshu.com/p ...

  9. Lens —— 最炫酷的 Kubernetes 桌面客户端

    原文链接:https://fuckcloudnative.io/posts/lens/ Kubernetes 的桌面客户端有那么几个,曾经 Kubernetic 应该是最好用的,但最近有个叫 Lens ...

  10. robot framework使用小结(四)

    robot framework可以采用读excel表这种形式实现数据分离,本文没有实现批量读取excel表内容(还不会),后续有必要就学习哈再更新~~~ 新建测试案例baidu05, 右键项目名rob ...