Django


第1章 Web应用

1.1什么是web应用程序?

Web 应用程序就是一种可以通过web访问的应用程序,程序的最大好处就是用户很容易访问程序,因为用户只需要有浏览器即可,不需要安装其他软件

应用程序有两种模式C/S,客户端和服务端,B/S,是浏览器和服务端,这类应用程序一般借助浏览器来运行,web应用程序一般是B/S模式

第2章 Web框架:

2.1什么是web框架?

Web框架是一种开发框架,用来支持动态网站,网络应用和网络服务的开发,着大多数的web框架提供了一套开发和部署网站的方式,也是为了web行为提供了一套通用的方法,web框架已经实现了很多功能,开发人员使用框架提供的方法并且完成自己的业务逻辑,就能快速开发web应用了

2.2Python中的web框架:

       Django    大而全

       Flask     轻量级

       Tornado   高性能

第3章 Django简介与安装使用

3.1MVCMTV模型

MVC

Web应用开发里著名的MVC模式,就是吧web应用分为:模型(M),控制器(C),视图(V)三层,他们之间以一种插件式的,松耦合的方式联系在一起,模型负责业务对象与数据库的映射(ORM),试图负责与用户的交互,控制器接受用户的调用模型和试图完成用户的请求

MTV

DjangoMTV本质上和MVC是一样的,只是定义上有些许不同

1.     M代表(model):负责业务和数据库的关系映射(ORM

2.     T代表(template):负责如何把页面展示给用户(html

3.     V代表视图(view):负责业务逻辑,并在适当的时候调用modeltemplate

4.     除了以上三层之外,还需要一个url分发器,他的作用是将一个个的url的页面请求分发给不同的view处理,view在调用相应的modeltemplateMTV响应模式如下

3.2什么是Django

Django是一个web框架,web框架的本质就是一个socket服务端

3.3Django的安装与使用

Ø  安装django

pip3 install django==1.11.9 -i http://pypi.hustunique.org/simple

Ø  创建一个django项目

django-admin startproject mydjango

Ø  文件说明:

manage.py----django项目的工具,通过他可以调用django shell和数据库等

settings.py----包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量

urls.py----负责把url模式映射到应用程序

Ø  Django目录下创建应用:

python3 manage.py startapp app01

Ø  启动django项目

python3 manage.py runserver 8000

3.4Django简单示例:

url控制器

from django.conf.urlsimport url
from django.contribimport admin
from app01import views

urlpatterns = [
    url(
r'^admin/'admin.site.urls),
    
url(r'^index/'views.index),
]

视图:

# Create your views here.
def index(request):
    
returnrender(request,'index.html')

模版

<!DOCTYPE html>
<html 
lang="en">
<head>
    <meta 
charset="UTF-8">
    <title>
Title</title>
</head>
<body>
<div>
hello</div>
</body>
</html>

3.5新手三件套:

from django.shortcuts import render,HttpResponse,redirect

# Create your views here.
def index(request):
    
#向浏览器返回字符串
    #return HttpResponse('hello web')
    #
向浏览器返回页面
    #return render(request,'index.html')
    #
返回重定向
    
return redirect('http://www.baidu.com')

3.6Djangopath问题

Ø  1.X

使用url,而且是支持正则

Ø  2.X

re_path就是1.X中的url

2.X中的path是新增的,但是url的方式也支持

path('准确路径',views.test,name='test')

第4章 路由

4.1django中路由的作用:

url配置就像django所支撑的目录,它的本质是url与要为该url调用的试图函数之间的映射表,你就是以这种方式告诉django,对于客户端发来的某个url调用那一段逻辑代码对应执行

4.2无名分组

括号内的内容会被分组分出来,当作参数,以位置参数的形式传到视图函数,视图函数应该接受这些参数

urls

urlpatterns= [
    url(
r'^admin/'admin.site.urls),
    
url(r'^index/(\d+)/(\d+)'views.index),
]

views

def index(request,res):
    
print(res)
    
return HttpResponse('hello')

4.3有名分组

括号内的内容会被分组分出来,当作参数,以关键字参数的形式传到视图函数,视图函数应该接受这些参数

urls

urlpatterns= [
    url(
r'^admin/'admin.site.urls),
    
url(r'^index/(?<m1>\d+)/(?<m2>\d+)',views.index),
]

views

def index(request,m1,m2):
    
print(m1,m2)
    
return HttpResponse('hello')

4.4反向解析:

Ø  在不使用反向解析,想达到访问index的时候跳转到test页面上需要这样做

urls

from app01import views

urlpatterns = [
     url(
r'^test/'views.test),
     
url(r'^index/'views.index),
]

views

def index(request):
    
return redirect('/test/')
def test(requset):
    
return HttpResponse('我是test首页')

Ø  上面的方法可以看出来,如果urls中的目录地址更换,那么后面views中跳转的地址全部需要更改,为了简化这个操作,就要用到反向解析了

urls

urlpatterns= [
     url(
r'^test/$'views.test,name='test'),
     
url(r'^index/$'views.index),
]

views

def index(request):
    url=reverse(
'test')
    
return redirect(url)
def test(requset):
    
return HttpResponse('我是test首页')

Ø  反向解析在模版中的使用:

urls

urlpatterns= [
     url(
r'^test/$'views.test,name='test'),
     
url(r'^index/$'views.index),
]

views

def index(request):
    
return render(request,'index.html')
def test(requset):
    
return HttpResponse('我是test首页')

html

<body>
    <div>
Djangoindex页面</div>
    <a 
href="{% url 'test' %}">点击进入test页面</a>
</body>

4.5路由分发:对多个app进行管理

1.     创建第二个app

python3 manage.py startapp app02

2.     settings中进行注册:

INSTALLED_APPS= [
    
'django.contrib.admin',
    
'django.contrib.auth',
    
'django.contrib.contenttypes',
    
'django.contrib.sessions',
    
'django.contrib.messages',
    
'django.contrib.staticfiles',
    
'app01',
    
'app02',
]

3.     在总路由中

#导入include模块

from django.conf.urlsimport url,include
from django.contribimport admin
#app总入口
urlpatterns = [
    url(
r'^app01/'include('app01.urls')),
    
url(r'^app02/'include('app02.urls'))
]

4.     在不同app

app01

from django.conf.urlsimport url
from django.contrib import admin
from app01 import views

urlpatterns = [
    url(
r'^app01test/'views.test),
]

app02

from django.conf.urlsimport url
from django.contrib import admin
from app02 import views

urlpatterns = [
    url(
r'^app02test/'views.test),
]

app01

from django.shortcutsimport render,HttpResponse,redirect,reverse

# Create your views here.

def test(requset):
    
returnHttpResponse('我是app01test页面')

app02

from django.shortcutsimport render,HttpResponse,redirect

# Create your views here.
def test(request):
    
returnHttpResponse('我是app02test页面')

第5章 视图层

5.1请求对象requset

#requset是一个对象,请求对象
#
请求的方法
print(requset.method)
#请求地址
print(requset.path)
#请求全路径
print(requset.get_full_path())
#get方式传递的参数
print(requset.GET)
return HttpResponse('我是index页面')

5.2向前端返回一个json格式字符串的两种方式:

1.     利用json模块

import json
# Create your views here.

def index(requset):
    data={
'name':'jiang','age':10}
    
returnHttpResponse(json.dumps(data))

2.     利用jsonRequest

from django.httpimport JsonResponse

# Create your views here.

def index(requset):
    data={
'name':'jiang','age':10}
    
returnJsonResponse(data,safe=False)

5.3文件上传案例:

html

<body>
<form 
action="" method="post" enctype="multipart/form-data">
    <p>
        <input 
type="file" name="myfile">
    </p>
    <input 
type="submit" value="提交">
</form>
</body>

urls

from app01import views
urlpatterns = [
    url(
r'^index/'views.file_upload),
]

views

rom django.shortcutsimport render,HttpResponse,redirect,reverse

# Create your views here.

def file_upload(requset):
    
ifrequset.method == "GET":
        
returnrender(requset,'index.html')
    files=requset.FILES
    myfile=files.get(
'myfile')
    
withopen(myfile.name,'wb'as f:
        
forline inmyfile:
            f.write(line)
    
returnHttpResponse('文件上传成功')

第6章 模版层

6.1模版语言语法:

变量:{{变量名}}

1.     深度查询,用点号

2.     过滤器

标签:{{% %}}

6.2简单使用:

html

<body>
{{ time }}
</body>

views

import time
# Create your views here.

def index(requset):
    ctime=
str(time.time())
    
returnrender(requset,'index.html',{'time':ctime})

6.3locals用法:

<body>
<p>
{{ ctime }}</p>
<p>
{{ dic }}</p>
<p>
{{ dic.name }}</p>
</body>

views

def index(requset):
    ctime=
str(time.time())
    dic={
'name':'jiang','age':10}
    
# return render(requset,'index.html',{'time':ctime,'dic':dic})
    #
会把该函数中所有的变量,构造成字典,传到模版中
    
returnrender(requset,'index.html',locals())

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章