初识Django
Python的WEB框架有Django、Tornado、Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能。
基本配置
day 48 自己写的wep框架(自己写的代码) 服务端 1.起服务(ip:port) 等待连接(监听) 4.服务端接收请求 5.返回响应 请求和响应 get请求 请求头 HTTP1.1 URL 200ok 请求体(没有) post请求 请求头 HTTP1.1 URL 200ok url里面是请求数据 请求体 username:alex password:dashabi 客户端(浏览器) 2.浏览器连接服务器 3.发送请求 Django Django安装与使用 1. pip3 -V 检查是否安装过 2. pip3 install Django 下载安装 3. Django-admin 查看参数 4. 配置环境变量 把 5.命令行创建一个Django 项目 django-admin startproject pys7 创建的文名字随意 6.cd pys7 7.python manage.py runserver 8.有一个db.数据库文件 不需要 可以直接删除 9.manage.py 是管理者 管理django项目的 有很多命令 例如启动命令 10.同名的是项目文件夹 不要动 11.urls.py 是函数和uel的对应文件夹 配置对应关系 12.setting.py 是配置相关 13.wsgi.py 是管server的服务的 消息管理(了解) 14.views.py 自己写的函数 统一放在这里 15.__init__.py 16.templates 存放模板文件的(html文件) index.html 13.socket服务端 有第三方的做的 不需要管收发消息了 14.wep应用服务器 wep server 他们之间有个规则 wsgi协议 处理请求 分发请求 15.我们写的都是wep应用 只需要关心请求的url 和回复的页面 16.pycharm里面创建一个django文件 17.templates 里面放模板文件 18.框架做的作用 前端 19.python manage.py runserver 127.0.0.1:8888 就可以改端口ip 20.回请求 需要按要求回 给一个Http的响应 包一下函数请求 from django.shortcuts import HttpResponse 21.#用户名 密码 报头等 都是request # return HttpResponse("ok") #包装成Http请求发给server端 然后再返回request 就代表了请求的所有内容 包括 参数 数据 22.cd cd G:学习盘python文件夹.idea代码文件夹7期代码文件夹djangomyweb 23.修改配置文件 -路径 模板文件夹的路径(TEMPSLTES=['DIRS':[os.path.join(BASE_DIR,'static')]]) -注释掉一个CSRF的中间件 -静态文件路径 STATIC_URL= "/static/" 在html文件上就用这个开头来引用静态文件 STEMPSLTES_DIRS= os.path.join(BASE_DIR,'static') 24.新手必备三件套 from django.shortcuts impot httpresponse 你写什么就回什么 字符串 render 渲染(request,'index.html',{'name':'alex'}) redirect (你要跳转的url) 24.1 request: 自己写的函数里面的形参(代表了所有请求的相关内容) request.mechod request.GET url里面有参数的时候 request.GET.get() request.POST 获取请求体里面的数据 request.POST.get() 25.模板语言: {{变量名}}error {%for i in class_list%} {{i.name}} {{i.id}} {%endfor%} {%if 条件%} 要做的事 {%else%} 要做的事 {%endif%} 26.AJAX 偷偷的发请求(页面不刷新) 区别于from表单的提交方式 基于jquery的AJAX $.ajax({ url:'/url/' type:'post' data:{'name':'alex'} success:function(data){ //data就是后端发过来的数据字符串 //前端做反序列化 var dataobj=JSON.parse } }) 27.后端序列化
1 概述: 2 静态文件交由Web服务器处理,Django本身不处理静态文件。简单的处理逻辑如下(以nginx为例): 3 URI请求-----> 按照Web服务器里面的配置规则先处理,以nginx为例,主要求配置在nginx. 4 conf里的location 5 |---------->如果是静态文件,则由nginx直接处理 6 |---------->如果不是则交由Django处理,Django根据urls.py里面的规则进行匹配 7 以上是部署到Web服务器后的处理方式,为了便于开发,Django提供了在开发环境的对静态文件的处理机制,方法是这样: 8 9 STATIC配置: 10 STATIC主要指的是如css,js,images这样文件: 11 TATIC_URL = '/static/' # 别名 12 STATICFILES_DIRS = ( 13 os.path.join(BASE_DIR,"static"), #实际名 ,即实际文件夹的名字 14 ) 15 16 ''' 17 18 注意点1: 19 django对引用名和实际名进行映射,引用时,只能按照引用名来,不能按实际名去找 20 <script src="/statics/jquery-3.1.1.js"></script> 21 ------error-----不能直接用,必须用STATIC_URL = '/static/': 22 <script src="/static/jquery-3.1.1.js"></script> 23 24 注意点2: 25 STATICFILES_DIRS = ( 26 ("app01",os.path.join(BASE_DIR, "app01/statics")), 27 ) 28 29 <script src="/static/app01/jquery.js"></script> 30 31 '''
MTV模型*****
Django的MTV分别代表:models(数据库,模型) templates(html模板) views(业务逻辑处理)
-
-
> MTV
Model(模型):负责业务对象与数据库的对象(ORM)
Template(模版):负责如何把页面展示给用户
View(视图):负责业务逻辑,并在适当的时候调用Model和Template
此外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template
视图层--路由配置系统(views/urls)
URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表;
你就是以这种方式告诉Django,对于这个URL调用执行这段代码,对于那个URL调用那段代码
1 urlpatterns = [ 2 url(正则表达式, views视图函数,参数,别名), 3 ] 4 5 参数说明: 6 7 一个正则表达式字符串 8 一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串 9 可选的要传递给视图函数的默认参数(字典形式) 10 一个可选的name参数
单一路由对应 : url(r
'^index$'
, views.index),
基于正则的路由
from django.conf.urls import url from . import views urlpatterns = [ url(r'^articles/2003/$', views.special_case_2003), url(r'^articles/([0-9]{4})/$', views.year_archive), url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail), ] ''' NOTE: 1 一旦匹配成功则不再继续 2 若要从URL 中捕获一个值,只需要在它周围放置一对圆括号。 3 不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles。 4 每个正则表达式前面的'r' 是可选的但是建议加上。 一些请求的例子: /articles/2005/3/ 不匹配任何URL 模式,因为列表中的第三个模式要求月份应该是两个数字。 /articles/2003/ 将匹配列表中的第一个模式不是第二个,因为模式按顺序匹配,第一个会首先测试是否匹配。 /articles/2005/03/ 请求将匹配列表中的第三个模式。Django 将调用函数 views.month_archive(request, '2005', '03')。 '''
分组
下面的示例使用简单的、没有命名的正则表达式组(通过圆括号)来捕获URL 中的值并以位置 参数传递给视图。在更高级的用法中,可以使用命名的正则表达式组来捕获URL 中的值并以关键字 参数传递给视图。
在Python 正则表达式中,命名正则表达式组的语法是(?P<name>pattern)
,其中name
是组的名称,pattern
是要匹配的模式。
############################无命名 #相当于传参数 url(r'^index/(d{4})',views.index) def index(request,arg): return HttpResponse(arg) #url访问http://127.0.0.1:8000/index/1113 #接受两个参数 url(r'^index/(d{4})/(d{2})',views.index) def index(request,arg,arg1): return HttpResponse("year: %s month: %s"%(arg,arg1)) #url访问http://127.0.0.1:8000/index/2017/06 year: 2017 month: 06 ############################有命名 url(r'^index/(?P<year>d{4})/(?P<month>d{2})',views.index) def index(request,year,month): return HttpResponse("year: %s month: %s"%(year,month)) #url访问http://127.0.0.1:8000/index/2017/06 year: 2017 month: 06
name参数
name参数: url(r'^login.html/', views.login,name="Login"), # login(request) in template: action="{% url 'Login' %}" <a href='{% url 'Login' %}'>click</a>
模板语言与反向解析
反向解析:
Django 提供一个办法是让URL 映射是URL 设计唯一的地方。你填充你的URLconf,然后可以双向使用它:
- 根据用户/浏览器发起的URL 请求,它调用正确的Django 视图,并从URL 中提取它的参数需要的值。
- 根据Django 视图的标识和将要传递给它的参数的值,获取与之关联的URL。
第一种方式是我们在前面的章节中一直讨论的用法。第二种方式叫做反向解析URL、反向URL 匹配、反向URL 查询或者简单的URL 反查。
在需要URL 的地方,对于不同层级,Django 提供不同的工具用于URL 反查:
- 在模板中:使用url 模板标签。
- 在Python 代码中:使用
django.core.urlresolvers.reverse()
函数。 - 在更高层的与处理Django 模型实例相关的代码中:使用
get_absolute_url()
方法。
模板语言: HTML代码+模板语法
模板的创建过程中,读取模板语言,将获取的数据插入到写好的模板中,最后将信息返回给用户
该语言可以实现数据展示,模版包括在使用时会被值替换掉的 变量,和控制模版逻辑的 标签。
也就是执行函数的变量 与 HTML中的特殊标签和变量的替换
在 Django 模板中遍历复杂数据结构的关键是句点字符 .
语法:
1.{{var_name}}
模板执行函数
def index(request):
import datetime
s="hello"
l=[111,222,333] # 列表
dic={"name":"yuan","age":18} # 字典
date = datetime.date(1993, 5, 2) # 日期对象
class Person(object):
def __init__(self,name):
self.name=name
person_yuan=Person("yuan") # 自定义类对象
person_egon=Person("egon")
person_alex=Person("alex")
person_list=[person_yuan,person_egon,person_alex]
return render(request,"index.html",{"l":l,"dic":dic,"date":date,"person_list":person_list})
template中html中替换的模板语言:
<h4>{{s}}</h4>
<h4>列表:{{ l.0 }}</h4>
<h4>列表:{{ l.2 }}</h4>
<h4>字典:{{ dic.name }}</h4>
<h4>日期:{{ date.year }}</h4>
<h4>类对象列表:{{ person_list.0.name }}</h4>
注意:句点符也可以用来引用对象的方法(无参数方法):
<h4>字典:{{ dic.name.upper }}<
/
h4>