您的位置:首页 > 编程语言 > Go语言

Django之1(项目准备,视图,路由)

2018-07-10 10:22 811 查看

①框架搭建前期准备

首先我们要创建独立的运行环境

使用的命令:

mkvirtualenv  django_py3_1.11 -p python3

workon  两个tab :查看拥有虚拟环境

workon  虚拟环境名称  :指定工作的虚拟环境

deactivate:退出虚拟环境

rmvirtualenv 虚拟环境名称:删除虚拟环境(注意要先退出再删除)

在虚拟环境中安装django:pip install django==1.11.1


②创建第一个django项目

django-admin startproject 工程名称

使用tree命令查看工程目录

settings.py是工程的配置文件

urls.py是项目的路由(url)配置文件

wsgi.py是项目与WSGI兼容的Web服务器入口(上线时使用)

manage.py是项目的启动文件,通过它管理项目


③运行项目

python manage.py runserver ip:端口(默认8000端口)

django 默认开启debug模式,增加,删除,修改文件,服务器自动重新启动

ctrl+c停止服务


④创建子应用python manage.py startapp 子应用名称

admin.py 文件跟跟网站的后台管理配置

apps.py 文件用于配置当前子应用的相关信息

migrations 存放数据库迁移历史文件

models.py 文件用于保存数据库模型类

test.py 文件用于开发测试用例,编写单元测试

view.py 文件用于编写web应用视图

注意:要将子应用进行注册

方法:在settings.py 中的INSTALLED_APP 中添加'子应用名称.apps.UsersConfig'


⑤django中视图的创建

在views.py中定义

def 视图函数名(request)

    return HttpResponse('fenghua')

解释:

request:接收包含请求数据的HttpRequest对象。HTTP请求的请求报文由客户端发送,其中包含和许多的信息,而 django 将这些信息封装成了 HttpRequest 对象,该对象由 HttpRequest 类创建。每一个请求都会生成一个 HttpRequest 对象,django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象。

HttpResponse:视图函数的返回值必须是一个响应对象,返回的字符串数据要放在HTTPResponse对象中


⑥定义路由

在urls.py文件中定义

from django.conf.urls import url

from . import views

方式1:父子路由配置各一半

子:

urlpatterns = [

url(r' ^index/$', views.视图函数名)

]

父:

import 子应用.views

from django.conf.urls import url, include

urlpatterns = [

 url(r'^子应用名称/', include('子应用名.urls'))

]

方式2:父路由全部配置

url(r'^子应用名/视图函数名/$', 子应用名称.views.视图函数名)

方式3:子路由全部配置

url(r'^users/index2$', views.index2)

同时在父路由中定义

url(r'^', users.views.index2)


⑦静态文件配置

在根目录创建文件夹static_files

在settings.py中修改参数

STATIC_URL = ’/static/‘

STATICFILES_DIRS = [

os.path.join(BASE_DIR, 'static_files')

]

这样就可以在浏览器中使用static/静态文件   来访问静态文件

DEBUG = False时,不对外提供静态文件,需要使用collectstatic命令来收集静态文件并交由其他静态文件服务器提供


⑧路由解析顺序

django中路由解析顺序是自上而下的,要注意产生屏蔽效应,定义好路由顺序


⑨路由命名以及反向解析

在定义路由时,可以在include中添加第二个参数进行命名空间的添加:namespace='子应用名''

url(r'^users/', include('users.urls', namespace='users')),

表示凡是在users.urls定义的路由,都属于namespace指定的users下

作用:避免不同的子应用中定义相同名字的路由而发生冲突,根据命名空间进行区分


在普通路由,添加第三个参数name=' XXX'

如:

url(r'^index/$', views.index, name='index'),

url(r'^say', views.say, name='say'),


有了上述铺垫,我们就可以使用反向解析

首先from django.urls import reverse

url = reverse('users:index')//users就是命名空间指定的users,index就是name指定的index

url = /users/index

对于未指定namespace的,reverse(name)就可以


⑩django中的请求

1.url路径参数

直接在函数中放参数接受即可

未命名参数按定义顺序传递(位置参数), 如
url(r'^weather/([a-z]+)/(\d{4})/$', views.weather),
def weather(request, city,year):
    print('city=%s' % city)
    print('year=%s' % year)

    return HttpResponse('OK')


命名参数按名字传递(关键字参数),如
url(r'^weather/(?P<city>[a-z]+)/(?P<year>\d{4})/$', views.weather),
def weather(request, year, city):
    print('city=%s' % city)
    print('year=%s' % year)

    return HttpResponse('OK')

2.QueryDict对象(可以处理一键多值)

查询字符串参数(形如?k1=v1&k2=v2):

例如:/qs/?a=1&b=2&a=3

定义函数qs

使用request.GET.get('a')获取a

使用request.GET.getlist('a')获取两个a的值

重要:查询字符串不区分请求方式,即假使客户端进行POST方式的请求,依然可以通过request.GET获取请求中的查询字符串数据。

3.请求体表单数据

先关闭CSRF保护(settings.py中MIDDLEWARE)

request.POST.get('a')

request.POST.getlist('a')

重要:request.POST只能用来获取POST方式的请求体表单数据。

4.请求体非表单数据

Django无法解析,request.body 属性获取原始数据,自己按照请求体格式(JSON,XML)进行解析

request.body返回的是bytes类型

{'a':'fenghua', 'b':24}

import json

def get_body_json(request):
    json_str = request.body
    json_str = json_str.decode()  # python3.6 无需执行此步
    req_data = json.loads(json_str) # 将字符串转化成dict
    print(req_data['a'])
    print(req_data['b'])

    return HttpResponse('OK')

5.请求头数据

通过request.META(字典类型)属性来获取请求头headers的数据

request.META['CONTENT_TYPE']

常见的请求头如:
CONTENT_LENGTH – The length of the request body (as a string).
CONTENT_TYPE – The MIME type of the request body.
HTTP_ACCEPT – Acceptable content types for the response.
HTTP_ACCEPT_ENCODING – Acceptable encodings for the response.
HTTP_ACCEPT_LANGUAGE – Acceptable languages for the response.
HTTP_HOST – The HTTP Host header sent by the client.
HTTP_REFERER – The referring page, if any.
HTTP_USER_AGENT – The client’s user-agent string.
QUERY_STRING – The query string, as a single (unparsed) string.
REMOTE_ADDR – The IP address of the client.
REMOTE_HOST – The hostname of the client.
REMOTE_USER – The user authenticated by the Web server, if any.
REQUEST_METHOD – A string such as "GET" or "POST".
SERVER_NAME – The hostname of the server.

SERVER_PORT – The port of the server (as a string).

6.其他常用HttpRequest对象属性

method:一个字符串,表示请求使用的HTTP方法,常用值包括:'GET'、'POST'。
user:请求的用户对象。
path:一个字符串,表示请求的页面的完整路径,不包含域名和参数部分。
encoding:一个字符串,表示提交的数据的编码方式。
如果为None则表示使用浏览器的默认设置,一般为utf-8。
这个属性是可写的,可以通过修改它来修改访问表单数据使用的编码,接下来对属性的任何访问将使用新的encoding值。
FILES:一个类似于字典的对象,包含所有的上传文件

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: