一、简单的webserver框架

from wsgiref.simple_server import make_server
def login(req):  #view函数
    print(req["QUERY_STRING"])
    return b"welcome!"
def signup(req):
    pass
def dongfei(req):
    return b"<h1>Hello Dongfei</h1>"
def router():  #路由函数
    url_patterns=[
        ("/login", login),
        ("/signup", signup),
        ("/dongfei", dongfei)
    ]
    return url_patterns

def application(environ, start_response):
    print("path",environ["PATH_INFO"])
    path=environ["PATH_INFO"]
    start_response('200 OK', [('Content-Type', 'text/html')])  # 设置请求头
    url_patterns = router()
    func = None
    for item in url_patterns:
        if item[0] == path:
            func = item[1]
            break
    if not func:
        return [b'404']
    return [func(environ)]
    # return [b'<h1>Hello World!</h1>']  #响应请求体

httpd = make_server('', 8080, application)
print('Serving HTTP on port 8080...')
httpd.serve_forever()

二、MVC和MTV模型

1、MVC模型

  • M:模型,负责业务对象与数据库的对象(ORM)
  • C:控制器,接受用户的输入调用模型和视图完成用户请求
  • V:视图,指展示的HTML文件

2、MTV模型

  • M:模型,负责业务对象与数据库的对象(ORM)
  • T:模板,HTML模板文件

  • V:视图函数,view,和MVC模型中的C功能类似

三、Django环境准备

>pip install django
>django-admin startproject mysite01  #创建Django项目
>cd mysite01
mysite01>python manage.py startapp blog  #创建app
-─mysite01
    │  manage.py
    │
    ├─blog
    │  │  admin.py
    │  │  apps.py
    │  │  models.py
    │  │  tests.py
    │  │  views.py  #视图
    │  │  __init__.py
    │  │
    │  └─migrations
    │          __init__.py
    │
    └─mysite01
        │  settings.py  #与Django相关的所有的配置信息
        │  urls.py  #负责路由分发
        │  wsgi.py
        │  __init__.py
        │
        └─__pycache__
                settings.cpython-36.pyc
                __init__.cpython-36.pyc

四、简单Django项目

  • urls.py
from django.contrib import admin
from django.urls import path
from blog import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('show_time', views.show_time)  #路由信息
]
  • blog/views.py
from django.shortcuts import render,HttpResponse
import time
def show_time(request):
    now_time = time.ctime()
    return render(request, "index.html", locals())
  • templates/index.html
<body>
    <h1>Time: {{ now_time }}</h1>
</body>

五、css/js等静态文件的引入

1、第一种引入方式

  • setting.py
STATIC_URL = '/static/'  #别名
STATICFILES_DIRS=(
    os.path.join(BASE_DIR,"static"),
)
  • templates/index.html
<body>
    <h1>Time: {{ now_time }}</h1>
    <script src="/static/jquery-3.4.1.js"></script>
    <script>
        $("h1").css("color","red")
    </script>
</body>
  • 创建一个static文件夹,将jquery文件放在此文件夹下

2、第二种引入方式

  • templates/index.html
<head>
    <meta charset="UTF-8">
    {% load staticfiles %}  #在此load
    <title>Title</title>
</head>
<body>
    <h1>Time: {{ now_time }}</h1>
    <script src="{% static 'jquery-3.4.1.js' %}"></script>  #指定文件
    <script>
        $("h1").css("color","red")
    </script>
</body>

### 六、Url路由配置系统

  • 无命名分组
path('article/<int:year>/<int:month>',views.article_year),
  • 命名分组
path('hello/<str:name>/', views.printname),
  • 别名
path('register', views.register, name="alias_reg")  #定义别名
<form action="{% url 'alias_reg' %}"></form>  #引用别名
  • 路由分发
from django.urls import path,include
urlpatterns = [
    path('blog/', include('blog.urls'))
]
from django.contrib import admin
from django.urls import path
from blog import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('show_time', views.show_time),
    path('article/<int:year>/<int:month>/<str:name>',views.article_year),
    path('hello/<str:name>/', views.printname),
    path('register', views.register, name="alias_reg")
]

七、View函数

1、request对象

def show_time(request):
    print(request.path)  #/blog/show_time
    print(request.get_full_path())  #/blog/show_time?name=dongfei
    now_time = time.ctime()
    return render(request, "index.html", locals())

2、HttpResponse对象

from django.shortcuts import render,HttpResponse,render_to_response
import time
def show_time(request):
    print(request.path)  #/blog/show_time
    print(request.get_full_path())  #/blog/show_time?name=dongfei
    now_time = time.ctime()
    # return render(request, "index.html", locals())  #推荐使用render,locals()将局部变量传给templates
    return render_to_response("index.html", locals())

3、redirect对象

from django.shortcuts import render,HttpResponse,render_to_response,redirect
import time
def show_time(request):
    return redirect("http://time.tianqi.com/")  #跳转

191016Django基础的更多相关文章

  1. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

  2. node-webkit 环境搭建与基础demo

    首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...

  3. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  4. Golang, 以17个简短代码片段,切底弄懂 channel 基础

    (原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...

  5. [C#] C# 基础回顾 - 匿名方法

    C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...

  6. HTTPS 互联网世界的安全基础

    近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...

  7. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

  8. .NetCore MVC中的路由(1)路由配置基础

    .NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ...

  9. .NET基础拾遗(5)多线程开发基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

随机推荐

  1. spring boot配置定时任务设置

    一.定时任务的时间写法: 每天凌晨2点  0 0 2 * * ?和每天隔一小时 0 * */1 * * ? 每隔5秒执行一次:*/5 * * * * ? 每隔5分执行一次:0 */5 * * * ? ...

  2. DES加密解密 MD5加密解密

    #region MD5 加密 /// <summary> /// MD5加密静态方法 /// </summary> /// <param name="Encry ...

  3. DedeAMPZ配置php的curl扩展

    DedeAMPZ配置php的curl扩展  curl是一个利用URL语法在命令行方式下工作的文件传输工具.它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, ...

  4. tensorflow源码分析

    前言: 一般来说,如果安装tensorflow主要目的是为了调试些小程序的话,只要下载相应的包,然后,直接使用pip install tensorflow即可. 但有时我们需要将Tensorflow的 ...

  5. 原生js实现简单的下拉刷新功能

    前言: 我们在浏览移动端web页面的时候,经常会用到下拉刷新. 现在我们用原生的js实现这个非常简单的下拉刷新功能. (温馨提示:本文比较基础,功能也很简单.写的不好的地方,希望大神提点一二.) 一. ...

  6. mybatis 分页插件PageHelper的简单使用

    首先在pom.xml配置文件中增加相关的插件. 插件地址:https://github.com/pagehelper/Mybatis-PageHelper <dependency> < ...

  7. 同一域名对应多个IP时,PHP获取远程网页内容的函数

    同一域名对应多个IP时,PHP获取远程网页内容的函数 [文章作者:张宴 本文版本:v1.0 最后修改:2008.12.15 转载请注明原文链接:http://blog.zyan.cc/post/389 ...

  8. 一个tornado框架下的文件上传案例

    html部分----使用了form表单,注意三要素 method="post"  action="/loaddata" enctype="multip ...

  9. linux负载均衡杂谈

    假如架构中的主机拥有全量数据集,即使其中一台挂了,也不会导致离线,高可用(负载均衡集群) 假如架构中的各主机只拥有sharing,那我们谓之 分布式集群 硬件ctrix F5-BIG-IP(一台动辄2 ...

  10. matplotlib 模块

    目录 matplotlib 模块 1.条形图 2.直方图 3.折线图 4.散点图+直线图 5.饼图 6. plot 函数参数 7.图像标注参数 matplotlib 模块 1.条形图 import m ...