每日分享
Develop success from failures. Discouragement and failure are two of the surest stepping stones to success.
从失败中获得成功。 沮丧和失败是成功的两个最可靠的垫脚石。
小闫语录:
有些人因为失败而一蹶不振,有些人却凭借失败积累的经验在后期获得成功。失败并不可怕,如果你连面对的勇气都没有,那么你真的不配成功。从失败中汲取教训,寻找失败的原因,为成功做铺垫。你比别人承受的更多,你最后获得的成果越丰硕。不要沮丧,不要畏惧,从第三者的角度看自己,你都会瞧不起自己。振作起来,厚积薄发,现在你所有的失败都是你成功之后,骄傲的谈资。
Django相关知识点回顾
1.web服务器和web框架
后端的服务器其实分为两部分,一部分是web服务器程序,一部分是web框架程序。两部分各司其职。我们结合后端服务器处理流程进行说明:
1.接收HTTP请求报文,web服务器进行解析,并调用框架程序处理请求。
2.web框架程序进行路由分发(根据url找到对应的处理函数)。
3.调用web框架程序的处理函数中进行业务的处理。
4.web服务器组织响应报文,返回内容给客户端。
2.项目创建
创建项目:
django-admin startproject 项目名
创建子应用:
python manage.py startapp 子应用
子应用首先到settings配置文件INSTALLED_APPS中进行注册。
2.1HelloWorld程序
2.1.1视图函数的定义
注意点:函数设置形参request接收请求对象;返回相应对象HttpResponse。
# /index def index(request): ... return HttpResponse('hello world')
2.1.2url地址配置
1.先在子应用中创建urls.py文件,设置当前子应用中url地址和视图的对应关系。
from django.conf.urls import url from users import views urlpatterns = [ # url('url正则表达式','对应视图函数') url(r'^index/$', views.index), ]
2.在项目中总的urls.py文件中对子应用的urls文件进行包含。
urlpatterns = [ ... url(r'^', include('users.urls')) ]
在访问后端接口的时候,会先到总的urls文件中进行匹配子应用,匹配到后再到子应用中的urls文件中进行视图的匹配,匹配到后,返回响应。
4.djano框架特点
1.Django框架强调快速开发和DRY原则。
DRY=DoNotRepeatYourself不要重复的你自己做过的事情
2.Django是重量级框架,相对于Flask来说,很多功能组件不需要自己再进行安装。
2.1提供了项目工程管理自动化脚本工具(对应Flask中的flask-script),也就是我们可以启动服务器的时候通过命令行的方式进行传参。
2.2数据库ORM支持(对应Flask中的FlaskSQLAlchemy)
ORM是对象关系映射,就是将数据库的操作都转化成对类,属性和方法的操作,不用写sql语句了,不用关注你使用的是mysql还是Oracle等。
3.MVT模式(Model模型、View视图、Template模板)
5.URL配置
Django默认url配置风格是在末尾加 /
,在子应用中进行url地址配置的时候,建议严格匹配开头和结尾。
反解析使用
reverse('namespace:name')
name是在子应用进行url配置时指定配置项的name
namespace是在项目总的urls中进行包含时指定的namespace
6.项目配置项
6.1BASE_DIR
BASE_DIR是Django项目根目录。
6.2语言时区本地化
LANGUAGE_CODE = 'zh-Hans' # 中文语言,也可以是'zh-hans' TIME_ZONE = 'Asia/Shanghai' # 中国时间
6.3静态文件
STATICFILES_DIRS --> 设置静态文件存放的目录
STATIC_URL --> 设置访问静态文件的url地址的前缀
django框架仅仅在DEBUG=True的模式下提供静态文件
7.客户端向服务器传递参数的途径
7.1通过url地址传递参数
url(r'^weather/(?P<city>\w+)/(?P<year>\d{4})/$', views.weather),
7.2通过查询字符串传递参数
# 演示从查询字符串中提取参数 # /query/?a=1&b=2&c=3&c=4 # flask: request.args # django: reequest.GET -> QueryDict类的对象,类似于字典,和字典区别:允许一键多值 def query_data(request): a = request.GET.get('a') b = request.GET.get('b') c = request.GET.get('c') c_list = request.GET.getlist('c') return HttpResponse('OK')
查询字符串不区分请求方式(get或者post请求方式都可以带查询字符串),即假使客户端进行POST方式请求,依然可以通过request.GET获取请求中的查询字符串数据。
7.3通过请求体传递数据
post表单提交,json数据,文件等等。
7.3.1post表单提交数据
# 演示获取post表单提交数据 # /form/ # flask: request.form # django: requst.POST -> QueryDict类的对象,类似于字典,和字典的区别允许一键多值 def form_data(request): name = request.POST.get('name') age = request.POST.get('age') return HttpResponse('OK')
7.3.2json数据
# 演示获取json数据 # /json/ # flask: request.json def json_data(request): req_data = request.body # 获取请求体中原始数据bytes # 将bytes转换为str json_str = req_data.decode() # 将json字符串转换为python字典 req_dict = json.loads(json_str) name = req_dict.get('name') age = req_dict.get('age') return HttpResponse('OK')
7.4通过请求头传递数据
request.META
7.5request对象的属性
Flask中request请求对象的属性 | Django中request请求对象的属性 | 说明 |
args | GET | 查询字符串参数 |
form | POST | 请求体中的表单数据 |
data | body | 请求体中的原始bytes数据 |
method | method | 请求方式 |
path | path | 请求的url地址(不含域名) |
headers | META | 请求头 |
cookies | COOKIES | 客户端发送的cookie信息 |
files | FILES | 客户端上传的文件 |
8.响应对象构造
8.1返回HttpResponse类的对象或其子类的对象
response =HttpResponse('<响应体>', content_type='<响应数据类型>', status='<响应状态码>')
response['<key>']='<value>'# 设置响应头
8.2响应时返回json数据
# 演示响应时返回json数据 # /get_json/ # flask: jsonify # Django: JsonResponse(<dict>) def get_json(request): res_dict = { 'name':'xiaohong', 'age':18 } return JsonResponse(res_dict)
8.3响应时进行页面的重定向
# 演示响应时进行页面重定向 # /redirect_test/ # flask: redirect('重定向的url地址') # django: redirect('重定向的url地址') def redirect_test(request): # 重定向到首页 req_url = reverse('users:index') return redirect(req_url)