django_day1[WSGI&django基本使用]
WSGI:
WSGI是Web服务器网关接口。这是一个描述Web服务器如何与Web应用程序通信以及如何将Web应用程序链接在一起来处理一个请求的规范。
python服务器的接口规范:WSGI
wsgiref <===python下的wsgi模块
示例:
#简单的模仿下http的请求处理流程
#! /usr/bin/env python # -*- coding: utf-8 -*- # __author__ = "Q1mi" # Date: 2017/8/21 from wsgiref.simple_server import make_server #导入wsgiref.simple_server下的make_server def login(request): f=open('login.html','rb') data=f.read() f.close() return [data] def regis(request): f=open('regis.html','rb') data=f.read() f.close() return [data] def reg(request): info=request.get('QUERY_STRING').split("&") _,reg_user=info[0].split('=') _,reg_passwd=info[1].split('=') data='username:%s,password:%s'%(reg_user,reg_passwd) return [data.encode('utf-8')] def auth(request): #当客户端 form表单提交时执行这个函数执行认证 info=request.get('QUERY_STRING').split("&") #获取客户端传入的用户名密码,使用&符号切割 _,user_info=info[0].split("=") #分离key和value ,获取用户名 _,passwd_info=info[1].split("=") #获取密码 if user_info=='abc' and passwd_info=="123": #判断 return [b'login ok'] #返回数据 else: return [b'username or password wrong'] def index(request): #定义index函数 对应客户端访问index 页面操作 上面的函数是一样的功能 f=open('index.html','rb') data=f.read() f.close() return [data] #返回读取的index页面 []为格式必须这么写 def routers(): #这个函数定义 客户端 IP/页面名 的映射关系 ----> url中的path(路径)与视图函数的一一映射关系 URLpattern=( ('/login',login), ('/regis',regis), ('/reg',reg), ('/auth',auth), ('/index',index), ) return URLpattern #返回这个元组 def application(environ,start_response): #接收两个参数 environ是接收的客户端提交信息 path=environ.get('PATH_INFO') #获取客户端提交的path参数 start_response('200 ok',[('Content-Type','text/html')]) #给客户端的回应消息头
urlrouters=routers() #获取映射关系 func=None for item in urlrouters: #循环元组 if path==item[0]: #如果path在元组中 func=item[1] #则 func 等于对应的函数 break #终止循环 if func: #如果函数存在 return func(environ) #执行函数 else: return [b'404'] #否则返回给客户端 404消息 if __name__ == '__main__': web=make_server('',80,application) #使用make_server 实例化 并传入参数 第一个""是IP地址,不写为本机,后面是端口号和一个处理请求的函数 web.serve_forever() #实例启动
创建一个Django项目
Django-admin startproject project_name
manage.py ===>> 与 django脚本交互的文件
mysite文件夹 ====>> 全局文件夹
settings.py =====>> django配置文件 全局配置文件
urls.py ====>> 路由分发 url中的path(路径)与视图函数的一一映射关系
项目与应用:
一个项目多个应用
一个应用可以被多个项目拥有
创建一个 django应用
python manage.py startapp appname
Django使用的是MTV模式
MTV和MVC两种模式:
著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层;他们之间以一种插件似的,松耦合的方式连接在一起。
MTV模式本质上与MVC模式没有什么差别,也是各组件之间为了保持松耦合关系,只是定义上有些许不同,Django的MTV分别代表:
Model(模型):负责业务对象与数据库的对象(ORM)
Template(模版):负责如何把页面展示给用户
View(视图):负责业务逻辑,并在适当的时候调用Model和Template
此外,Django还有一个url分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template
使用pycharm创建 django project

django的基本使用:
完全目录树:

主要使用了templates文件夹、urls.py、views.py、settings.py
#urls.py文件 from blog import views #导入app中的views urlpatterns = [ url(r'^admin/', admin.site.urls), #这里写映射关系 url(r'^$',views.index), url(r'^regis/',views.regis), url(r'^login/',views.login), ] #views.py文件
#这个文件定义了各种返回页面和认证的函数,函数必须接受一个值 request
def index(request): return render(request,"index.html") def regis(request): if request.method=="POST": print(request.POST) username = request.POST.get("user") password = request.POST.get("passwd") return HttpResponse("username:%s\npassword:%s" %(username,password)) return render(request,"regis.html") def login(request): #登录页面,下面附登录页面的form表单 if request.method=="POST": #判断如果客户端的form表单 method=POST print(request.POST) username = request.POST.get("user") #取出里面的用户名和密码 password = request.POST.get("passwd") if username == "abc" and password == "123": #判断用户名密码 return HttpResponse("登录成功!") #返回数据 return render(request,"login.html") #settings.py文件中的 TEMPLATES内容 TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR,"templates")], #有些pycharm 或者django在创建的时候这里是空的需手动加上,否则报找不到templates文件夹的错误 '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', ], }, }, ]
<!--login page--> <form action="http://127.0.0.1:80/login/" method="post"> //配置action为login method为post <p>username:<input type="text" name="user"></p> //必须配置name属性,否则request.POST会获取不到值 <p>password:<input type="password" name="passwd"></p> <input type="submit"> </form>
#settings.py中的MIDDLEWARE设置 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', #目前来做这个实验必须注释这句要不在input点击提交时会报forbidden(403) 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
浙公网安备 33010602011771号