Django学习笔记NO1

    科技2023-10-14  108

    一、常用命令:

    安装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请求处理流程:

    django获取用户发出的请求django在工程配置文件settings.py中通过ROOT URLCOF配置来确定根URLconfdjango在URLconf中的所有URL模式中,查找第一个匹配的条目如果找到匹配,将调用相应的视图函数,并将HttpRequest对象传入视图函数回一个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',)))
    Processed: 0.009, SQL: 8