Django学习笔记NO1

一、常用命令:

安装Django:pip install django==2.2 #指定版本为2.2
新建项目:django-admin startproject myblog # myblog为项目名
新建APP:python manage.py startapp App # App为名
启动项目:python manage.py runserver
生成数据库迁移文件:python manage.py makemigrations
执行迁移:python manage.py migrate
创建超级管理员:python manage.py createsuperuser

二、Django请求处理流程:

  1. django获取用户发出的请求
  2. django在工程配置文件settings.py中通过ROOT URLCOF配置来确定根URLconf
  3. django在URLconf中的所有URL模式中,查找第一个匹配的条目
  4. 如果找到匹配,将调用相应的视图函数,并将HttpRequest对象传入
  5. 视图函数回一个HttpResponse响应

三、路由:

1.path对象有四个参数

  • 模式串:匹配用户请求路径的字符串
  • 视图函数:匹配上用户指定请求路径后调用的是视图函数名
  • kwargs:可选参数,需要额外传递的参数、是一个字典
  • 名称(name):给路由命名,在代码中可以用name进行反向解析(由name获取用户请求路径)
    如果path中模式串不能满足路由规则,可以使用re_path对象。
    re_path对象中模式串的正则表达式。

2.注意:

  • django从上往下进行模式匹配,一旦匹配成功就不会往下继续匹配
  • 一个视图函数可以有多个模式匹配
  • 模式前面不需要加/
  • 如果匹配不上,则会引起异常

3.在path中使用<参数名>表示所传参数,在视图函数在的参数名必须和<>中参数名一致。参数可以是一下类型:

  • str:如果没有指定参数类型,默认是字符串类型。字符串参数可以匹配除/和空字符外的其他字符串
  • int:匹配0和正整数,视图函数的参数将得到一个整型值
  • slug:匹配由数字、字母、-和_组成的字符串参数
  • path:匹配任何非空字符串,包括/。

4.在re_path在,()部分是正则分组,djang在进行url匹配时,就会自动把匹配成功的内容作为参数传递给视图函数。

  • 位置参数:url中的正则表达式组,和视图函数中的参数一一对应,函数中的参数名可以任意指定
# 位置参数
re_path(r'^hello/(\w+)/(\d{1,2})/$', views.hello)
# 视图函数
def hello(request, value1, value2): # 参数名可以任意,但顺序不能乱
	return HttpResponse('OK')
  • 关键字参数:对正则表达式分组进行命名
# 关键字参数
re_path(r'^hello/(?P<name>\w+)/(?P<age>\d{1,2})/$', views.hello)
# 视图函数
def hello(request, name, age): # 参数名必须是name和age,但顺序随意
	return HttpResponse('OK')

四、视图:

视图本质上是一个函数(类),这个函数第一个参数类型是HttpRequest,它返回一个HttpResponse实例。
作用:

  • 响应模板
  • 重定向
  • 直接响应字符串
  • 响应错误模板
  • json数据

1.HttpRequest

视图的第一个参数必须是HttpRequest类型的对象
常用属性

  • GET:一个类似于字典的QueryDict对象,包含get请求方式的所有参数
  • POST:一个类似于字典的QueryDict对象, 包含post请求方式的所有参数
  • COOKIES:一个标准的PYTHON字典,包含有所有cookie,键和值都是字符串
  • SESSION:一个类似于字典的对象,表示当前的会话,只有当django启用会话的支持时可用
  • method:一个字符串,表示请求使用的Http方法,POST,GET

2.重定向:

HttpResponseRedirect(redirect)

  • 不带参数的重定向:
from django.shortcuts import HttpResponseRedirect,reverse, redirect
# urls.py
urlpatterns = [
	path('', views.index),
	path('^list/$', views.list_user),
]
# views.py
def index(request):
	return render(request, 'index.html')
def list_user(request):
	return redirect('list/')
  • 带参数的重定向:
from django.shortcuts import HttpResponseRedirect,reverse, redirect
# urls.py
urlpatterns = [
	path('repath/<int:num>/', views.repath),
	path('list/<name>/<age>/', views.list_user),
]
# views.py
def repath(request, num):
	return redirect('list/asd/1')
def list_user(request, name, age):
	return HttpSponse('name={}, age={}'.format(name, age))

2.反向解析:

根据namespace和name查找真实路径

# urls.py
app_name = 'App' # 应用的命名空间

urlpatterns = [
    path('', views.index, name='index'),
    path('show/<name>/<int:age>/', views.show, name='show'),
    re_path('^call/(\d{4}-\d{8})/$', views.call, name='cal'),
    path('req/', views.req_res, name='reqres')
]
# views.py
def index(requset):
    return HttpResponse('首页')

def show(request, name, age):
    return HttpResponse(name + ':' + str(age))

def call(request, phone):
    return HttpResponse(phone)
def req_res(request):
	# return redirect(reverse('App:index')) # 不带参数
    # 如果参数有名字,必须使用关键字传参
    # return redirect(reverse('App:show', kwargs={'name': 'admin', 'age': 20}))
    return redirect(reverse('App:cal', args=('0123-12345678',)))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值