状态码如200 OK,以3位数字和原因 成。数字中的 一位指定了响应 别,后两位无分 。响应 别有以下5种。

重定向:
客户端像服务器端发送请求,服务器告诉客户端你去重定向(状态码302,响应头location=客户端绝路路径),客户端继续像服务器发送请求(请求地址已经成重定向的地址),服务器端给客户端响应

转发
客户端像服务器端发送请求,服务器将请求转发到服务器内部,在响应给客户端

重定向
response.setStatus(302) response.setHeader("location","/项目名称/资源"); 或者简写成 response.sendRedirect("/项目名称/资源")

转发
getRequestDispatcher(“/资源”) .forward(request.response)

区别:
什么时候使用重定向,什么时候使用转发

  • 转发地址栏不变(一次请求),重定向地址栏变化(两次)
  • 转发不用写项目名称,重定向需要编写项目名称
  • 转发可以使用request对象传递值,重定向不可以使用request对象传递值
  • 转发只能在服务器的内部进行操作,重定向可以定向到任何的资源

配置静态文件夹2步

1、在项目文件夹下建'static‘文件夹

2、在setiings文件下添加别名路径

STATICFILES_DIRS=[

  • os.path.join(BASE_DIR,"STATICS')  
  • ]    
  • //添加静态文件夹

STATIC_URL = 'static'    //别名

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,"templates"),], # 添加模板路径
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,"templates"),],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
] django解释器配置(用于打开下载的项目,或打开以前做的项目 ,不配置会报错。) 1、配置项目解释器
file--settings--project Interpreter
project Interpreter: (此处选择安装python的路径) 2、到pycharm 右上角选择项目 edit configuration 选中 run browser
<p>{{ text|truncatechars:9 }}</p>  #截取9个字符
<p>{{ text|truncatewords:3 }}</p>  #截取3个单词
{{forloop.counter}} 从1 开始计数,写在for 循环里才有用
{{forloop.counter0}}  从0 开始计数,写在for 循环里才有用
{% for person in person_list %}
<p>{{ forloop.counter0 }} {{ person.name }} {{ person.age }}</p>
{% empty %} ##嵌套在for 循环里,相当于python 里的else作用
<p>列表为空</p>
{% endfor %}

django将模型转为mysql数据库中的表

在book下的models.py中创建模型:

from django.db import models
# Create your models here. class Book(models.Model):
id=models.AutoField(primary_key=True)
title=models.CharField(max_length=32)
state=models.BooleanField()
pub_date=models.DateField()
price=models.DecimalField(max_digits=8,decimal_places=2)
publish=models.CharField(max_length=32) settings配置 若想将模型转为mysql数据库中的表,需要在settings中配置: DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'bms',      # 要连接的数据库,连接前需要创建好
'USER':'root',       # 连接数据库的用户名
'PASSWORD':'',       # 连接数据库的密码
'HOST':'127.0.0.1', # 连接主机,默认本级
'PORT':3306     # 端口 默认3306
}
} #迁移之前必须先手动创建好'bms'库 ##在settings.py 中 检查INSTALLED_APPS中查找INSTALLED_APS中 “app01”(应用文件夹名,没有就添加,否则会报错) 注意1:NAME即数据库的名字,在mysql连接前该数据库必须已经创建,而上面的sqlite数据库下的db.sqlite3则是项目自动
创建 USER和PASSWORD分别是数据库的用户名和密码。设置完后,再启动我们的Django项目前,我们需要激活我们的mysql。
然后,启动项目,会报错:no module named MySQLdb 。这是因为django默认你导入的驱动是MySQLdb,可是MySQLdb
对于py3有很大问题,所以我们需要的驱动是PyMySQL 所以,我们只需要找到项目名文件下的init,在里面写入:
import pymysql
pymysql.install_as_MySQLdb()

最后通过两条数据库迁移命令即可在指定的数据库中创建表terminal中输入:


python manage.py makemigrations
python manage.py migrate
 

Django设置调试models输出的SQL语句

django1.3在shell下,调试models变得更为简单了,不用像之前的版本,手工去调用django query,才能打印出之前的代码是执行的什么SQL语句.

1.3开始只需在settings.py里,配置如下logging即可:

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'propagate': True,
'level':'DEBUG',
},
}
}

Django的API操作mysql中常用的语句

【背景】

增/删/改/查 如何操作数据库

导入数据库的模型

In [23]: from blog.models import People
 

【增加记录】--三种方法

方法一: 直接使用数据模对象的create函数

In [24]: People.objects.create(name='shuaige')

Out[24]: <People: People object>

注意:创建成功返回对象地址

方法二:

In [6]: record = People(name='choubaguai')
In [7]: record.save()
 

方法三:

In [9]: record = People()
In [10]: record.name ='andy'
In [11]: record.save()
 

【删除记录】--找对对象,使用delete() 进行删除

第一找出你要删除的对象集合(id大于2的)

In [19]: r_d = People.objects.filter(id__gt =2)
 

使用delete对象将其删除

In [20]: r_d.delete()
Out[20]: (3, {'blog.People': 3})
 

将返回珊瑚的条目数

【改记录】-先找出来,在将对象属性重新赋值

(将id=1的名字改成andyliu)

In [21]: People.objects.values_list()
Out[21]: [(1, 'liudehua'), (2, 'zhangxueyou')]
In [22]: r_m = People.objects.get(id=1)
In [23]: r_m.name = 'andyliu'
In [24]: r_m.save()
In [25]: People.objects.values_list()
Out[25]: [(1, 'andyliu'), (2, 'zhangxueyou')]
 

【查】 这就相当于mysql中sql语句中的select语句,其中有很多字语句进行限制查询

1 获取所有记录对象

all_record = People.objects.all()

如果要获取对象值,需要先取出某一个对象,然后取出对象中的属性

In [32]: for record in all_record:
....: print(record.id)
....: print(record.name)
....:
1
andyliu
2
zhangxueyou
 

2 获取某个域为指定值的对象

In [11]: r_p = People.objects.get(name='zhangxueyou')
In [12]: r_p.id
Out[12]: 2
 

注意: 这个用法不常用,如果要用,你一定要保证,你查找的一定存在这样的一个记录,且必须是唯一,不然会报错哦

3 类似mysql中where进行的条件查询使用filter函数

第一: 整数的范围比较查询()

将id大于1的对象找出来,并以值列表的形式进行返回

In [15]: People.objects.filter(id__gt=1).values_list()
Out[15]: [(2, 'zhangxueyou'), (6, 'andyliu')]
 
gt 大于
gte 大于等于
lt 小于
lte 小于等于
ne 不等于
in(也可以是其他数据类型) 位于给定列表中: People.objects.filter(id__in=[1, 3, 4]) 返回一个 polls 列表(ID 值分别是 1或3或4).
In [16]: People.objects.filter(name__in=['andyliu','zhangxueyou']) 
Out[16]: [<People: People object>, <People: People object>, <People: People object>]
 

4 多过滤条件查询,有一种方法是,多次使用filter函数即可

In [17]: People.objects.filter(id__gt=1).filter(name='andyliu')
Out[17]: [<People: People object>]
In [18]: People.objects.filter(id__gt=1).filter(name='andyliku')
Out[18]: []
 

5 查找到的对象数据(即符合条件的记录的数目)

In [25]: People.objects.count()

Out[25]: 3

等于:

In [26]: People.objects.all().count()

Out[26]: 3

符合条件的长度

In [24]: People.objects.filter(name='andyliu').count()
Out[24]: 2
 

6 order_by()函数,进行升序/降序

-负数表示要进行降序排序

In [14]: p = People.objects.order_by('-id')
In [15]: for i in p:
print(i.id)
....:
6
2
1
 

7 in list

In [15]:
Person.objects.filter(id__in = [1,2]).values_list()
Out[15]: [(1,
'name1', 22), (2, 'name2', 22)]
 

8 not in list(这里没有直接的not in list) 但是可以使用exclude,除外来等价

In [16]:
Person.objects.exclude(id__in = [1,2]).values_list()
Out[16]: [(3,
'name3', 22), (4, 'name3', 22)]
 

9. 包含关键字的(集合链式查询)

表中的所有数据:

In [20]: Person.objects.values_list()
Out[20]: [(1, 'name1', 23), (2, 'name2', 22), (3, 'name3', 22), (4, 'name3', 22)]
 

name这个field包含name的关键字的record记录

In [21]: Person.objects.filter(name__contains="name").values_list()
Out[21]: [(1, 'name1', 23), (2, 'name2', 22), (3, 'name3', 22), (4, 'name3', 22)]
 

name这个field包含name的关键字的record记录并且年龄age字段不能等于23的! 使用链式查询

In [23]: Person.objects.filter(name__contains="name").exclude(age=23).values_list()
Out[23]: [(2, 'name2', 22), (3, 'name3', 22), (4, 'name3', 22)]
 

以上需求用filter进行等价操作,取出22岁的

In [24]: Person.objects.filter(name__contains="name").filter(age=22).values_list()
Out[24]: [(2, 'name2', 22), (3, 'name3', 22), (4, 'name3',
 

10 对象索引,类似python 列表中的切片

In [29]: Person.objects.all()[1:3]

Out[29]: [<Person: Person object>, <Person: Person object>]

In [30]: Person.objects.all()[1:3].values_list()

Out[30]: [(2, 'name2', 22), (3, 'name3', 22)]

但是不知持负索引(会报错),如

Person.objects.all()[-1]

取代的方法:使用reverse方法来解决

												

第6模块 web框架口述题的更多相关文章

  1. 第二百五十六节,Web框架

    Web框架 Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 举例: #!/usr/bin/env python #c ...

  2. 自创Web框架之过度Django框架

    目录 自创Web框架之过度Django框架 软件开发架构 HTTP协议 Web框架之"撸起袖子加油干" Web框架之通过wsgiref加油干 封装优化处理 动静网页 jinjia2 ...

  3. [py]彻底细究web框架的wsgi+逻辑处理模块

    wsgi逻辑结构初探 参考: 这里图很精彩,wsgi写的不错 web框架 = wsgi+逻辑处理app 接收请求,返回对应的内容 python wsgiref实现了wsgi规范. from wsgir ...

  4. 2、基于wsgiref模块DIY一个web框架

    一 web框架 Web框架(Web framework)是一种开发框架,用来支持动态网站.网络应用和网络服务的开发.这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方 ...

  5. 第六模块:WEB框架开发 第1章·Django框架开发1~50

    01-Django基础介绍 02-Web应用程序1 03-Web应用程序2 04-http请求协议1 05-http请求协议2 06-http协议之响应协议 07-wsgire模块1 08-wsgir ...

  6. Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基础文件配置,Web框架的本质,服务器程序和应用程序(wsgiref服务端模块,jinja2模板渲染模块)的使用

    Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基 ...

  7. 09 基于模块wsgiref版web框架

    09 基于模块wsgiref版web框架 模块引入 真实开发中的python web程序,一般会分为两部分:       服务器程序:负责对socket服务器进行封装,并在请求到来时,对请求的各种数据 ...

  8. wsgiref模块、web框架、django框架简介

    """web框架:将前端.数据库整合到一起的基于互联网传输的python代码 web框架也可以简单的理解为是软件开发架构里面的'服务端'""" ...

  9. 两个Python web框架:Django & Tornado比较

    就是说它作为 web 框架比 Django 简单,又支援异步 IO,且更不需要前端的 webserver ? 我已经混乱了, Tornado是 Nginx.Django.Node.js 的结合体?又或 ...

随机推荐

  1. 20165322 实验一 Java开发环境的熟悉

    实验一 Java开发环境的熟悉 一.实验内容及步骤 (一)命令行下Java程序开发 按照步骤新建目录.键入代码,再编译运行输出.运行结果和TREE结构图如下: (二) IDEA下Java程序开发.调试 ...

  2. 什么是React中的组件

    组件就是页面上的一部分.如图,左边是一个网页.右边是对应的一个组件图.我们可以把一个大的网页拆分成很多小的部分.比如标题部分,对应一个组件,就是标题组件.搜索部分,对应的组件就是搜索组件.而这个搜索组 ...

  3. 如何为WebStorm设置SASS的File Watchers?

    Webstorm是一个很牛叉的IDE,现在工作每天都是用它了. 最近开始用SASS,LESS等来写CSS,而在Webstorm中,它自带一个File Watchers功能,设置一下,即可实时编译SAS ...

  4. HDU 1111 Secret Code(数论的dfs)

    Secret Code Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit ...

  5. 第二章:RESTful API

    学习内容 使用Spring MVC编写Restful API 使用Spring MVC处理其他web应用常见的需求和场景 如何处理静态资源和异常,如何使用Spring MVC的拦截器,文件的上传下载, ...

  6. 29.You executed the following command to perform a backup of the USERS tablespace:

    29.You executed the following command to perform a backup of the USERS tablespace:SQL> ALTER TABL ...

  7. requirements.txt 快速备份与安装项目所需安装包

    在查看项目时,通常会有一个requirements.txt 文件, requirements.txt 文件是用于记录所有依赖包及其精确的版本号,便于项目在其它电脑时新环境部署构建项目所需要的运行环境. ...

  8. Windows远程桌面连接命令mstsc

    常用的:1. mstsc /v: 192.168.0.1 连接数满了之后使用的:2. mstsc /v: 192.168.0.1 /console -admin Mstsc 命令参考Updated: ...

  9. iOS | CAShapeLayer转场动画

    什么也不说了,作为一名乐于分享技术的小开发,直接先上个样式最为直观贴切,有需要的朋友可以直接拿过去用. 需要demo请点击这里 :github 在这个demo中,核心为选用画布CAShapeLayer ...

  10. 安装VMware,出现没有虚拟网络适配器的问题

    遇到错误:安装VMware Workstation Pro这个软件,网络适配器中没有虚拟网卡,导致无法上网 解决方法:遇到这个问题,我就第一时间就去网上搜索解决方法,方案有很多,但是试了很多个还是不行 ...