0
点赞
收藏
分享

微信扫一扫

Django的基础使用


安装Django



pip3 install django==2.2.5




检查是否安装Django



pip3 freeze|grep -i 'Django'




Django的基础使用_python


创建工程


django-admin startproject +名称


如:django-admin startproject bookmanager



Django的基础使用_字符串_02


进入bookmanager目录运行django


运行python:


python manage.py runserver



Django的基础使用_数据_03


查看django进程id


lsof -i:8000


项目结构-共有配置settings.py


BASE_DIR
    用于绑定当前项目的绝对路径(动态计算出来的),所有文件夹都可以依赖此路径
DEBUG
    用于配置Django项目的启动模式,取值:
    True 表示开发环境中使用开发调试模式(用于开发中)
    False 表示当前项目运行在生产环境中

ALLOWED_HOSTS
    设置允许访问到本项目的host头值
    空列表,表示只有请求头中host为127.0.0,localhost能访问本项目 - DEBUG = True时有效
    [*"],表示任何请求头的host都能访问到当前项目
    [192.168.1.3','127.0.0.1']表示只有当前两个host头的值能访问当前项目


INSTALLED_ APPS     #指定当前项目中安装的应用列表
MIDDLEWARE     #用于注册中间件
TEMPLATES         #用于指定模板的配置信息
DATABASES         #用于指定数据库的配置信息

指定语言
LANGUAGE CODE -用于指定语言配置
英文: "en-us"
中文: "zh-Hans '

时区配置:
TIME_ZONE    #用于指定当前服务器端时区
    世界标准时间: "UTC"
    中国时区: "Asia/Shanghai"
ROOT_URLCONF     #用于配置主url配置 'mysite1.urls'.
    ROOT URLCONF = 'mysite1.urls'


视图函数


用于接收一个浏览器请求(HttpRequest对象)并通过HttpResponse对象返回相应的的函数。此函数可以接收浏览器请求并根据业务逻辑返回相应的响应内容个给浏览器


路由配置-path


path()函数


导入 - from django.urls import path


语法 - path(route,views,name=Node)


参数:


1.route:字符串类型,匹配的请求路径


2.views:指定路径所对应的视图处理函数的名称


3.name:为地址起别名,在模板中地址反向解析时使用


路由配置-转换器


path转换器


语法:<转换器类型:自定义名>


作用:若转换器类型匹配到对应类型的数据,则将数据按照关键字传参的方式传递给视图函数


例子:


 #定义类型和参数,在网页上浏览时传参


path('page/<int:pg>',views.pagon_view),
views.py
from django.http import HttpResponse
def pagon_view(request,pg):
    html = '这是编号为%s的网页'%(pg)
    return HttpResponse(html)


例子2:定义小计算器


    定义格式:ip:端口号/整数/操作字符串/[add/sub/mul]/整数


    从路由中提取数据,做相应的操作后返回给浏览器


实现目标


    输入:ip:port/100/add/200


    页面显示结果:300


path('<int:n>/<str:op>/<int:m>',views.cal_views),


def cal_views(request,n,op,m):
    if op not in ['add','sub','mul']:
        return HttpResponse('你的操作错误,请输入:add、sub或者mul')
    #判断用户输入
    result = 0
    if op == 'add':
        result = n + m
    elif op == 'sub':
        result = n - m
    elif op == 'mul':
        result = n * m
    # 返回最终结果
    return HttpResponse('结果为:%s'%(result))


路由配置 - re_path()


re_path()函数


    在url的匹配过程中可以使用正则表达式进行精确匹配


语法:


    re_path(reg,view,name=xxx)


    正则表达式为命名分组模式(?P<name>pattern);匹配提取参数后用关键字传参方式传递给视图函数。


#urls

# ip:端口号/整数2/操作字符串/[add/sub/mul]/整数2
    re_path(r'^(?P<x>\d{1,2})/(?P<op>\w+)/(?P<y>\d{1,2})$',views.cal2_view),


#view

def cal2_view(request,x,op,y):
    html = 'x:%s op:%s y:%s'%(x,op,y)
    return HttpResponse(html)


案例:输出生日为:xxxx年xx月xx日



Django的基础使用_数据_04


#urls.py

# #http://192.168.40.135:8000/birthday/年4/月2/日2
    re_path(r'^birthday/(?P<y>\d{4})/(?P<m>\d{1,2})/(?P<d>\d{1,2})$',
    views.birthday_view),
    # #http://192.168.40.135:8000/birthday/月2/日2/年4
    re_path(r'^birthday/(?P<m>\d{1,2})/(?P<d>\d{1,2})/(?P<y>\d{4})$',
    views.birthday_view)


#view.py

def birthday_view(request,y,m,d):
    html = "生日为%s年%s月%s日"%(y,m,d)
    return HttpResponse(html)


请求和响应


定义:


请求:是指浏览器端通过HTTP协议发送给服务器端的数据


响应:是指服务器端接收到请求后做相应的处理后在回复给浏览器端的数据


请求方法



Django的基础使用_django_05



Django的基础使用_python_06


Django中的请求


    请求在Django中实则就是视图函数的第一个参数,即HttpRequest对象


  Django接收到http协议的请求后,会根据请求数据报文创建HttpRequest对象


    HttpRequest对象 通过属性 描述了 请求的所有相关信息。



path_info:URL字符串

method:字符串,表示HTTP请求方法,常用值:‘GET’、'POST'

GET:QueryDict查询字典对象,包含get请求方式的所有数据

POST:QueryDict查询字典的对象,包含post请求方式的所有数据

  FILES:类似于字典的对象,包含所有的上传文件信息


   COKIES:python字典,包含所有的cookie,键和值都为字符串

  session:似于字典的对象,表示当前的会话

body:字符串,请求体的内容(POST或PUT)

scheme:请求协议('http'/'https')

request.get_full_path():请求的完整路径

request.META:请求中的元数据(消息头)

-reques.META['REMOTE_ADDR']:客户端IP地址


示例:


def test_request(request):
    print('path info is',request.path_info)
    print('method is ',request.method)
    print('querystring is',request.GET)
    print('full path is', request.get_full_path())
   
    return HttpResponse('test request ok')


常见的HTTP 响应 状态码


200    #请求成功

301    #永久重定向-资源(网页等)被永久转移到其他URL

302    #临时重定向

404    #请求的资源(网页等)不存在

500    #内部服务器错误



Django的基础使用_数据_07


Django中的响应对象


构造函数格式:


HttpResponse(content=响应体,content_type=响应体数据类型,status=状态码)


作用:


向客户端浏览器返回响应,同时携带响应体内容


常见的Content-Type如下:



Django的基础使用_django_08


重定向到另一个路由


return HttpResponseRedirect ( '/page/1' )


GET请求和POST请求


定义


无论是GET还是POST,统一都由视图函数接收请求,通过判断request.method区分具体的请求动作


def test_get_post(request):
    if request.method == 'GET':
        pass
    elif request.method == 'POST':
        #处理用户提交的数据
        pass
    else:
        pass
    return HttpResponse('--test get post is ok--')


GET处理


GET请求动作,一般用于向服务器获取数据


能够产生GET请求的场景:


    -浏览器地址栏中输入URL,回车后

    -<a href="地址?参数=值&参数=值">

    -form表单中的method为get


GET请求方式中如果有数据需要传递给服务器,通常会用查询字符串(Query String)传递



Django的基础使用_数据_09


POST处理


POST请求动作,一般用于向服务器提交大量/隐私数据

客户端通过表单等POST请求将数据传递给服务端


例如:



Django的基础使用_python_10


使用post方式接收客户端数据



Django的基础使用_django_11


取消csrf验证,否则Django将会拒绝客户端发来的POST请求,报403响应


如何取消csrf验证


-禁止掉settings.py中MIDDLEWARE中的CsrfViewsMiddleWare的中间件
  
   

 MIDDLEWARE = [
    
   .....
    
    #'django.middleware.csrf.CsrfViewMiddleware',
    
    ....
    
]

举报

相关推荐

0 条评论