zoukankan      html  css  js  c++  java
  • 3.基础知识点回顾

    一、web应用

    1.1、web应用

    ​ 应用程序有两种的模式,分别是b/s以及c/s。

    ​ b/s为浏览器与服务端之间的应用程序,而c/s为客户端与服务端之间的程序

    ​ web就是b/s模式的应用程序,他只需要用户少量硬盘的资源,其余都在服务端之上,并且不用更新

    ​ 由于完全是远距离传输,因此对浏览器以及互联网的连接比较依赖

    1.2、web框架

    ​ Python的web框架主要要三种:分别是Django、flask、tornado

    ​ Django的特点是大而全,自带的动能比较多,但是过于笨重

    ​ flask的特点是小而精,第三方模块比较多,比较依赖于第三方模块

    ​ tornado的特点是异步非阻塞,支持高并发

    1.3、wsgi协议

    ​ wsgi协议是Python种的一个协议,规定了怎么拆封HTTP协议

    ​ HTTP协议数据传输使用的是明文,HTTPS协议数据传输使用的是密文

    1.4、模板文件的渲染

    ​ models在后端渲染完,只要出了Django框架,就是完整的HTML,CSS,JS

    二、路由控制

    2.1、Django的框架类型

    ​ Django是一种同步框架,其中1.x版本和2.x版本在路由URL上是不同的

    ​ 1.x版本上是使用URL,2.x上使用的是path

    2.2、Django的路由写法

    ​ 先导入URL,其中参数(传递给视图函数的默认形式,使用字典类型)和别名可以不写

    ​ from Django.conf.urls import url

    ​ urlpatterns = [ url(正则表达式,views视图函数,参数,别名)]

    2.3、APPEND_SLASH

    ​ Django setting.py配置中没有append_slash,其中Django默认append_slash = Ture,主要作用是在URL的末尾默认加入/,如果将append_slash = False加入setting.py中,就能取消/

    2.4、有名分组和无名分组

    ​ 有名分组和无名分组主要区别在于是否有(?p

    ​ 有名分组:re_path(r^article/(?p[0-9]{4})/$,views.year_archive),

    ​ 无名分组:re_path (r^article/(0-9){4}/$views.year_archive)

    2.5、路由分发

    ​ 将一个总路由分发给多个子路由

    ​ 路由分发:url(r'^app01/',include(app01.urls))

    ​ 子路由连接视图views:from django.conf.urls import url

    ​ from app01 import views
    ​ urlpatterns = [ url(r'^reg/',views.reg)]

    2.6、反向解析

    ​ 反向解析是同过后端向前端传递变量,通常传递的变量数据是主键值,用来处理数据的增删改查

    ​ 使用的是reverse模块

    		from django.shortcuts import reverse
    
    ​		url = reverse('test',args=(10,20))     通过URL别名的一致,URL传递变量数据
    

    2.7、名称空间

    ​ 由于子路由中,可能会出现相同的URL的别名,而反向解析是通过URL中的别名进行定位,因此Python建立了名称空间保证了互不干扰。

    ​ 为了更好的识别子路由中对应的URL,因此在别名前添加子路由的信息,使其具有唯一性

    	urlpatterns = [url(r'^reg/',views.reg,name='app01_reg')]
    

    2.8、内置转换器

    ​ Django2.x不支持URL,只能使用path

    ​ path不支持正则,但是能用五种转换器,将进行限制path的第二路由,分别是:

    ​ 1.str:可以匹配除了/以外的非空字符,为默认形式

    ​ 2.int:匹配正整数,包括0

    ​ 3.slug:匹配字母、数字、横杠、下划线组成的字符串

    ​ 4.uuid:匹配格式化的uuid,例如: 075194d3-6885-417e-a8a8-6c931e272f00

    ​ 5.path:匹配非空字符串

    path('index/<int:id>',index)
    

    2.9、自定义的转换器

    class MonthConverter:
        regex='d{2}' # 属性名必须为regex
        def to_python(self, value):
            return int(value)
        def to_url(self, value):
            return value # 匹配的regex是两个数字,返回的结果也必须是两个数字    
        from django.urls import path,register_converter
        from app01.path_converts import MonthConverter
        # 先注册转换器
        register_converter(MonthConverter,'mon')
        from app01 import views
        urlpatterns = [
        path('articles/<int:year>/<mon:month>/<slug:other>/',     views.article_detail, name='aaa'),
    
    ]
    

    三、视图层

    3.1、response对象

    ​ 视图层响应对象的三种方式:分别是:

    ​ 1.HttpResponse() 返回字符串类型

    ​ 2.render() 返回HTML页面,并且在返回浏览器前还可以给HTML传值

    ​ 3.redirect() 重定向

    ​ 视图函数必须要返回一个HttpResponse

    3.2、Jsonresponse对象

    ​ 前端序列化:json.stringify() 前端反序列化:json.parse()

    ​ 后端序列化:json.dumps() 后端反序列化:json.loads()

    ​ 从后端向前端发送json格式的字符串有两种方式,一个是使用json.dumps()进行序列化,一个时使用Jsonresponse对象,进行序列化

    import json
    data = {'name':'ab'}
    return HttpResponse(json.dumps(data))    #第一种
    from django.http import JsonResponse
    data1 = {'name':'ac'}
    return JsonResponse(data1,safe = False)		#第二种
    

    3.3、request对象

    ​ request对象的使用方法:

    ​ request.method == :获取请求方式

    ​ request.post:只能获取普通的键值对数据,不能获取文件

    ​ request.get:获取get请求

    ​ request.files:获取文件

    ​ request.body:获取浏览器发过来的数据

    ​ request.path:只能获取路由,不能获取路由后面的参数

    ​ request.path_info :只能获取URL,不能获取路由后面的参数

    ​ request.get_full_path():获取URL后面完整的参数

    3.4、301和302的区别

    ​ 301为永久性的重定向,之前的路由已经失去

    ​ 302位暂时性的重定向,之前的路由还在,只是暂时不能使用

    3.5、CBV和FBV

    3.5.1、CBV

    ​ class base views 基础类视图

    ​ 使用类的基础视图,需要先从view里面继承view

    from django.views import view
    class Mylogin(view):
    	def get(self,request):
    		return render(request,'form.html')
    	def post(self,request):
    		return HttpRsponse('post方法')
    

    3.5.2、FBV

    ​ function base views 基础函数视图

    ​ 使用函数的基础视图,视图函数中必须要传request

    def index(request):
    	return HttpResponse('index')
    

    3.6、form表单的文件上传

    def index(request):
    	if request.method == 'GET':
    		return render(request,'index.html')
    	else:
    		myfile = request.FILES.get('myfiles')
    		from django.core.files.uploadedfile import InMemoryUploadedFile
    		name = myfile.name
    		with open(name,'wb') as f:
    			for line in myfile:
    				f.write(line)
    		return HttpResponse('文件上传成功')
    

    四、模板层

    4.1、模板语法传值

    ​ 变量相关使用:{{变量名}}

    ​ 逻辑相关使用:{% %}

    4.2、模板语法查询

    ​ 使用的是“句点符”

    ​ django中的模板只能使用点的形式取值,可以使用.变量名、.索引的形式来取值

    ​ 取出字典d里里面的bobby字典,bobby列表里面的第四个索引,第四个索引里面的key=info,对应的value

    <p>{{d.bobby.3.info}}</p>
    

    4.3、内置过滤器

    ​ django的内置过滤器有60多种,暂时只需要了解10种就够了

    4.3.1、过滤器的基本语法

    ​ {{数据|过滤器:参数}}

    4.3.2、过滤器的使用

    <p>统计长度:{{s|length}}</p>	#统计变量名为s的长度,并在页面中展示
    <p>默认值:{{b|default:啥也不是}}</p>	#default第一个参数为True则展示第一个参数后面的值,否则展示冒号后面的值,内部源码为or
    <p>文件大小:{{file_size|filesizeformat}}</p>
    <p>日期格式化:{{current_time|date:'Y-M-D H-I-S'}}</p>
    <p>切片操作:{{l|slice:'0:4:2'}}</p>
    <<p>切取字符(包含三个点):{{ info|truncatechars:9 }}</p>
    <p>切取单词(不包含三个点 按照空格切):{{ egl|truncatewords:9 }}</p>
    <p>切取单词(不包含三个点 按照空格切):{{ info|truncatewords:9 }}</p>
    <p>移除特定的字符:{{ msg|cut:' ' }}</p>
    <p>拼接操作:{{ l|join:'$' }}</p>
    <p>拼接操作(加法):{{ n|add:10 }}</p>
    <p>拼接操作(加法):{{ s|add:msg }}</p>
    <p>转义:{{ hhh|safe }}</p>
    <p>转义:{{ sss|safe }}</p>
    <p>转义:{{ res }}</p>
    

    4.3.3、转义

    ​ 其中转义safe指的是:Django中将设置成默认取消转义,也就是当变量内部含有需要执行的条件时,是不会执行的,也就是相当于字符串的形式。要求转义的时候需要使用{{变量名|safe}}

    ​ 转义是前后端分离的重要部分,可以在后端写完功能,然后传递到前端去,其中转义就决定了功能的实现

    ​ 前端转义: 变量名|转义

    ​ 后端转义: 需要先导入mark_safe

    from django.utils.safestring import mark_safe
    
    res = make_safe('<h1>哈哈</h1>') 
    

    4.4、标签

    ​ 标签也就是逻辑相关的使用:{% %},逻辑主要就是for循环和if判断,可以和else以及elif搭配

    4.4.1、for循环

    {%for foo in l%}
    	<p>{{foo}}</p>
    

    4.4.2、if判断

    {%if b%}
    	<p>呵呵</p>
    

    4.4.3、with起别名

    ​ with 可以在as后面为前面选择的进行取别名,后续可以快速的操作

    {with d.bobby.3.info as nb}
    	<p>{{nb}}</p>
    

    4.5、模板的导入和继承

    4.5.1、模板的导入

    ​ 模板的导入只需要直接使用include导入就行了

    <% include 'index.html'%>
    

    4.5.2、模板的继承

    ​ 首先需要用extends确定一个要继承的模板,选择需要修改的区域,使用block content以及endblock确定范围,在文件内使用block content以及endblock之间填写需要修改的内容

    ​ 模板页面至少可以有三个可以被修改的区域

    {% extends 'home.html' %}	确定继承模板
    {% block contends %}
    	页面内容,或者模板内容
    {% endblock %}		#HTML区域使用
    
    {% block css %}
    	页面内容
    {% endblock %}		#css区域使用
    
    {% block js %}
    	模板内容,划定区域
    {% endblock %}		#js区域使用
    
    

    五、模型层

    5.1、使用orm的步骤

    ​ orm使用的步骤有五步,分别是:

    5.1.1、在setting中配置(连接数据库的地址,以及端口信息)

    DATABASES = {
    	'default':{
    		'ENGINE':'django.db.backends.mysql',
    		'NAME':'day64',
    		'USER':'ROOT',
    		'PASSWORD':'admin123',
    		'HOST':'127.0.0.1',
    		'POST':'3306'
    	}
    }
    

    5.1.2、在 init 中导入pymysql

    import pymysql
    pymysql.install_as_MySQLdb()
    

    5.1.3、在models.py中写类,写属性

    ​ 建立models模型,导入models模块,建立类,设定name和age,添加创建时间自由编写

    from django.db import models
    class User(models.model)
    	name = models.CharFiled(max_length = 32)
    	age = models.IntegerField()
    	register_time = models.daField()
    

    5.1.4、使用数据库的迁移命令

    ​ 连接数据库,现在pycharm中点击tool===》run...

    ​ 在下面的执行窗口输入

    Python3 manage.py makemigrations	#记录
    python3 manage.py migrate		#真正的数据同步
    

    5.1.5、在视图函数中使用orm

    ​ 接着就可以在视图函数中使用orm了

    5.2、orm中的api

    ​ Book.object.

    1.all():			查询所有结果
    2.filter():			筛选条件
    3.get():			返回相匹配的对象,只要不唯一就会报错
    4.exclude():		排除条件
    5.ordel_by():		对查询结果排序,(-id)为倒序
    6.reverse():		对查询结果反向排序,前提是已经使用order_by排序
    7.count():			查询数据库中对象的数量
    8.first():			  返回第一条记录
    9.last():			返回最后一条记录	
    10、exists():	    如果QuerySet包含数据,就会返回True,否则返回False
    11、values():		得到的对象为字典类型
    12、values_list():	得到的对象为列表内包元组
    13、destinct():		从返回结果中去重
    

    5.3、下划线查询

    ​ book.objects.filter()

    price_in = [10,20,30]		筛选出列表中的数字
    price_gt = 100				筛选出大于100的数字
    price_it =100				筛选出小于100的数字
    price_gte = 100				筛选出大于等于100的数字
    price_ite = 100				筛选出小于等于100的数字
    price_range = [100,200]		筛选出100到200的数字
    title_contains = 'python'	模糊查询,带有python的,区分大小写
    title_icontains = 'python'	模糊查询,带有python的,部分区分大小写
    title_starswith = 'py'		查询开头带有py的
    pub_date_year = 2012		查询时间为2012年的
    

    5.4、删除

    book.objects.filter().delete()	删除一条
    queryset对象.delete()			删除多条
    

    5.5、更新

    book.objects.filter(title_startswith = 'py').update(price = 120)
    

    5.6、增加

    book.objexts.create(title = '呵呵',price=99)
    
  • 相关阅读:
    Gradle命令行操作
    Web项目构建
    Java构建
    任务操纵
    mysql 查看当前使用的配置文件my.cnf的方法(推荐)
    mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by
    Oracle注入速查表
    git 初始化项目操作
    mybatis 一次执行多条SQL MySql+Mybatis+Druid之SqlException:sql injection violation, multi-statement not allow
    文件存储 FileUtil FileBaseDto
  • 原文地址:https://www.cnblogs.com/jingpeng/p/13228220.html
Copyright © 2011-2022 走看看