Django介绍
Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。
基本在虚拟机运行框架,使用Uduntu运行Django
本地pycharm编写代码,上传虚拟机运行
url基本概念及格式
-
在项目目录下创建urls.py文件
from django.urls import path,include from . import views urlpatterns = [ path('admin/', admin.site.urls), path('index/',views.index), path('index1/<course>',views.index1), path('index2/<course>&<int:july>',views.index2), #多个参数时的url拼接 转换器的使用 ]
-
在项目目录下创建views.py文件
from django.http import HttpResponse def index(request): return HttpResponse('why,why') #单个的数据传入 def index1(request,course): return HttpResponse('这是你不能拒绝的%s'%course) #多个数据传入 和转换器的使用 def index2(request,course,july): return HttpResponse('几几年啊{},几月啊{}'.format(course,july))
path和re_path
-
path
path('index2/<course>&<int:july>',views.index2)
- 使用尖括号(<>)从url中捕获值。
包含一个转化器类型(converter type)
没有转化器,将匹配任何字符串,当然也包括了 / 字符- 转换器有以下
- str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
- int,匹配正整数,包含0。
- slug,匹配字母、数字以及横杠、下划线组成的字符串。
- uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
- path,匹配任何非空字符串,包含了路径分隔符
- 转换器有以下
- 使用尖括号(<>)从url中捕获值。
- 当前面的url匹配成功后就会调用后面的视图函数
-
re_path
-
re_path('^hello/$',views.test5)
- 使用与正则类似进行匹配以
hello
开头并以/
结尾的url
re_path('^hello/(?P<yy>[0-9]+)/',views.test6)
- 匹配以
hello
开头的并满足某种条件的url
- 使用与正则类似进行匹配以
-
def test5(request): return HttpResponse('这是用的re_path设置的') def test6(request,yy): print(yy,type(yy)) return HttpResponse('hello %s'%yy)
-
Kwargs的作用
传递一个Python 字典作为额外的参数传递给视图函数
使用这个在主urls.py
文件给大量的url
传递统一参数是尤为方便
#主urls.py文件
from django.contrib import admin
from django.urls import path,include
from . import views
urlpatterns = [
path('book/',include('book.urls'),{'switch':'true'}) #使用include给分路由分配路径
]
#这是名为book的app的views.py
from django.shortcuts import render,reverse,redirect
from django.http import HttpResponse
# Create your views here.
#都要接收 **kwargs 否则会报错
def index(request,**kwargs):
return HttpResponse('这是book里的index')
def index1(request,**kwargs):
if kwargs.get('switch') == 'true':
print('参数传递成功')
return HttpResponse('这是book里的index1')
name的作用
给一个匹配的url地址取名字一般用于模板,也可以使用reverse进行页面重定向
这时用户访问老的url时则会重定向到新的url
#app为book的urls.py
#注意app的urls.py不能为空只有格式也行 否则会报错
#注意 要在主项目设置里进行注册
from django.urls import path
from . import views
urlpatterns = [
path('old/',views.old_url),
path('new/',views.new_url,name='RE_url'),
]
#app为book的views.py
from django.shortcuts import render,reverse
from django.http import HttpResponse
def old_url(request,**kwargs):
if kwargs.get('switch') == 'true':
# return redirect('/book/new/') #满足条件 使用redirect 进行网页重定向的写法
return redirect(reverse('RE_url')) #满足条件 使用reverse 进行网页重定向
return HttpResponse('这是老的地址')
def new_url(request,**kwargs):
return HttpResponse('这是新的地址')
- name参数可以给这个url取一个合适的名字。
- 通过给url取名字,以后在view或者模板中使用这个URL,就只需要通过这个名字就可以了。
- 这样做的原因是防止url的规则更改,会导致其他地方用了这个url的地方都需要更改,但是如果取名字了,就不要做任何改动了切记
- redirect是重定向,reverse是将url的name解析成url本身的函数
模板路径配置
-
模版放在哪里
- 在主目录下创建一个templates目录用来存放所有的html的模板文件
- templates目录里面在新建各个以app名字命名的目录来存放各个app中模板文件
-
创建完成后要在主项目的setting 中进行配置
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', ], }, }, ]
##模板渲染方式
即对前端页面的编写
-
可以直接硬写进行对页面的编写
def index2(request,**kwargs): return HttpResponse('<h1>可以直接硬写进行页面的编写</h1>')
-
使用render
from django.shortcuts import render,reverse,redirect from django.http import HttpResponse from django.template.loader import get_template def index3(request,**kwargs): U = get_template('book/book_index.html') #得到template里所写的html文件 HTML = U.render() #进行渲染 return HttpResponse(HTML) #返回
from django.shortcuts import render,reverse,redirect from django.http import HttpResponse #也可直接使用 此时可直接使用template下所写的html文件 然后使用render直接渲染 def index3(request,**kwargs): return render(request,'book/book_index.html')