191016Django基础
一、简单的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基础的更多相关文章
- java基础集合经典训练题
第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...
- node-webkit 环境搭建与基础demo
首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- Golang, 以17个简短代码片段,切底弄懂 channel 基础
(原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...
- [C#] C# 基础回顾 - 匿名方法
C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...
- HTTPS 互联网世界的安全基础
近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...
- Swift与C#的基础语法比较
背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...
- .NetCore MVC中的路由(1)路由配置基础
.NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ...
- .NET基础拾遗(5)多线程开发基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...
随机推荐
- .Net高并发解决思路
转自: 本文如有不对之处,欢迎各位拍砖扶正.另源码在文章最下面,大家下载过后先还原一下nuget包,需要改一下redis的配置,rabbitmq的配置以及Ef的连接字符串.另外使用的是CodeFirs ...
- js之运算符其它运算符(三元运算符,逗号运算符,void运算符,typeof,delete运算符)
Javascript支持很多其它的运算符,具体如下: 一.条件运算符(?:) 条件运算符是Javascript中唯一的三个操作数的三元运算符,有时会直接称做是“三元运算符”. 基本格式:conditi ...
- 【Java】 Java网络编程总结
一.网络编程三要素: IP地址:每个设备在网络中的唯一标识. 端口号:每个程序在设备上的唯一标识. 协议:为计算机网络中进行数据交换而建立的规则或约定的集合. UDP: 面向无连接,数据不安全,速度 ...
- Hybrid APP架构设计
通讯 作为一种跨语言开发模式,通讯层是Hybrid架构首先应该考虑和设计的,往后所有的逻辑都是基于通讯层展开. Native(以Android为例)和H5通讯,基本原理: Android调用H5:通过 ...
- Dedecms 生成速度慢 的解决办法
从dedecms官网论坛找到个合适的代码 include/inc/inc_fun_SpGetArcList.php for($i=0;$i<$ridnum;$i++){ if($tpsql==& ...
- ssh无密码访问设置(ssh-keygen 的详解)
[原文链接]http://blog.csdn.net/wh_19910525/article/details/7433164 为了让两个linux机器之间使用ssh不需要用户名和密码.所以采用了数字签 ...
- Linux硬件访问技术
在Linux系统中,无论是内核程序还是应用程序,都只能使用虚拟地址,而芯片手册中给出的硬件寄存器地址或者RAM地址则是物理地址,无法直接使用,因此,我们读写寄存器的第1步就是将将它的物理地址映射为虚拟 ...
- Linux内核管理子系统和进程管理子系统
内核管理子系统职能:1.管理虚拟地址与物理地址的映射 2.物理内存的分配 程序:存放在磁盘上的一系列代码和数据的可执行映像,是一个静止的实体. 进程:是一个执行中的程序,它是动态的实体 进程四要素: ...
- Linux查看系统开机和关机时间
1.who 命令查看 who -b 查看最后一次系统启动的时间 who -r 查看当前系统运行时间 [root@test ~]# who -b system ...
- Jmeter Beanshell 编程简介
简介 Jmeter除了提供丰富的组件以外,还提供脚本支持,可通过编写脚本来丰富Jmeter,实现普通组件无法完成的功能.Beanshell是一种轻量级的Java脚本语言,完全符合Java规范,并且内置 ...