ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python正课137 —— 基础扩展3 django

2020-07-02 17:02:01  阅读:277  来源: 互联网

标签:__ Book 协议 Python request django filter objects 正课


本文内容皆为作者原创,如需转载,请注明出处:https://www.cnblogs.com/xuexianqi/p/13225770.html

一:web应用,http协议,web框架

1.IP+端口号 唯一确定一个应用

2.web框架是什么?

是用于进行Web开发的一套软件架构。大多数的Web框架提供了一套开发和部署网站的方式。
为Web的行为提供了一套支持支持的方法。
使用Web框架,很多的业务逻辑外的功能不需要自己再去完善,而是使用框架已有的功能就可以。

3.HTTP协议

超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。

HTTP和HTTPS的区别:
	HTTP协议是一种使用明文数据传输的网络协议
		无状态、无连接、基于请求和响应、基于TCP/IP协议之上的应用层协议
		默认端口80
	
	HTTPS协议是一种使用密文数据传输的网络协议
		内容加密、验证身份、保证数据完整性
		默认端口443

4.wsgi协议、wsgiref、uWSGI分别是什么

uWSGI是一个web服务器,它实现了WSGI协议、uwsgi协议、HTTP等协议.

WSGI是web服务器网管接口,是一套协议,用于接收用户请求并将请求进行初次封装,然后交给web框架。

uwsgi协议,是一个uWSGI服务器自有的协议,它用于定义传输信息的类型,每一个uwsgi packet(数据信息包)前 4byte为传输信息类型描述,用于与nginx等代理服务器通信。

wsgi协议是Python中的一个协议:规定了如何拆、封HTTP协议

5.模板文件是在哪里渲染的?

在服务端完成渲染,传输到浏览器,形成一个静态页面

只有HTML、CSS、JS是在浏览器完成渲染的,其余都是在服务端渲染的

这就是前后端分离的来源,前端只写前端页面,后端只写后端代码,通过接口来传输json数据来交互

二:Django请求生命周期

img

三:路由控制

# django是一个同步框架
# 最新版本3.x  
# URL与要为该URL调用的视图函数之间的映射表
# 1.x 和2.x版本路由稍微不同
	1.x:url
    2.x:path,re_path(原来的url)
# 写法
from django.conf.urls import url
urlpatterns = [
     url(正则表达式, views视图函数,参数,别名),
]
#  APPEND_SLASH  的用法
# 
# 有名分组 
re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
# 无名分组
re_path(r'^articles/([0-9]{4})/$', views.year_archive),

# 路由分发
path('app01/', include(urls)),

#反向解析
###视图函数中
from django.shortcuts import reverse
url=reverse('test',args=(10,20))  # test是在url内配置的别名
###在模板中使用
{% url "别名" 参数  参数%}

# 名称空间(了解)

#2.x的path内置了几个转换器
str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
int,匹配正整数,包含0。
slug,匹配字母、数字以及横杠、下划线组成的字符串。
uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)


# 2.x的path自定义转换器(了解)

四:视图层

#response对象: 三件套+JsonResponse   本质都是HttpResonse
#request对象:
	request.GET:http://127.0.0.1:8000/index/123?name=lqz&age=18   name=lqz&age=18会被转成字典,放到GET中
    request.POST:urlencoded,formdata两种编码的数据会被放在这个字典中
        
    request.META:HTTP请求的其他东西,放在里面,入客户端ip地址:REMOTE_ADDR
    request.FILES:上传的文件
    request.session:用的session
        
        
# 301 和302的区别

# JsonResponse

# CBV和FBV
#文件上传(form表单中指定编码方式)
def index(request):
    if request.method=='GET':

        return  render(request,'index.html')
    else:
        myfile=request.FILES.get('myfile')  #文件对象
        print(type(myfile))
        from django.core.files.uploadedfile import InMemoryUploadedFile
        name=myfile.name
        print(myfile.field_name)
        with open(name,'wb') as f:
            for line in myfile:
                f.write(line)
        return HttpResponse('文件上传成功')

五:模板层

模版语法重点:

  变量:{{ 变量名 }}

    1 深度查询 用句点符

    2 过滤器

  标签:{{%  % }}

	内置过滤器:
    {{obj|filter__name:param}}  变量名字|过滤器名称:变量
    重点:safe
    
    xss攻击
    <a href="https://www.baidu.com">点我<a>  如果原封不动的显示在html中,一定是a标签,html的特殊字符
    
    for标签
    if标签
    with标签
    
    
    # {% csrf_token%}
    {% csrf_token%}
{{ csrf_token }}
<input type="hidden"value="sadfasdfasdf">


# 模板的导入和继承
include
extend:先用{% block title %},
再用{% extends "base.html" %} 
{% block content %}
自己的内容
{% endblock %}

六:模型层

# 使用orm的步骤
	1 在setting中配置(连数据库的地址,端口)
    2 在 __init__中使用pymysql
    3 在models.py中写类,写属性
    4 使用:数据库迁移的两条命令
    	python3 manage.py makemigrations  #记录
        python3 manage.py migrate         # 真正的数据库同步
    5 在视图函数中使用orm
    	
 # orm的api
    <1> all():                  查询所有结果

    <2> filter(**kwargs):       它包含了与所给筛选条件相匹配的对象

    <3> get(**kwargs):          返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。

    <4> exclude(**kwargs):      它包含了与所给筛选条件不匹配的对象

    <5> order_by(*field):       对查询结果排序('-id')

    <6> reverse():              对查询结果反向排序

    <8> count():                返回数据库中匹配查询(QuerySet)的对象数量。

    <9> first():                返回第一条记录

    <10> last():                返回最后一条记录

    <11> exists():              如果QuerySet包含数据,就返回True,否则返回False

    <12> values(*field):        返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列
                                model的实例化对象,而是一个可迭代的字典序列
    <13> values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列

    <14> distinct():            从返回结果中剔除重复纪录
        
        
 # 下划线查询
        Book.objects.filter(price__in=[100,200,300])
        Book.objects.filter(price__gt=100)
        Book.objects.filter(price__lt=100)
        Book.objects.filter(price__gte=100)
        Book.objects.filter(price__lte=100)
        Book.objects.filter(price__range=[100,200])
        Book.objects.filter(title__contains="python")
        Book.objects.filter(title__icontains="python")
        Book.objects.filter(title__startswith="py")
        Book.objects.filter(pub_date__year=2012)
 #删除
	对象.delete()   #删一条
    queryset对象.delete()  # 删多条
 #更新
	Book.objects.filter(title__startswith="py").update(price=120)

标签:__,Book,协议,Python,request,django,filter,objects,正课
来源: https://www.cnblogs.com/xuexianqi/p/13225770.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有