Django
1.创建django主体框架
1.1 打开终端或python命令交互窗口
1.2 cd到Python项目目录下(自定义目录)
cd ~/PycharmProjects
1.3 创建django项目
django-admin startproject project2
1.4 创建应用
Python manage.py startapp App
2.项目基本配置
按照如下配置设置settings.py配置文件
Project2>Project2>settings.py
# 允许其他机器访问,不加*表示只允许本机访问
ALLOWED_HOSTS = ['*']
# 安装应用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'App', # 把自己的应用安装一下
]
# 根路由的位置:Project2包下的urls
ROOT_URLCONF = 'Project2.urls'
# 模版位置:在根目录下的templates子目录下
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'templates')], # 模版位置
'APP_DIRS': True, # 首先会在App下找templates,如果为False,就不找了
'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',
],
},
},
]
# 语言
LANGUAGE_CODE = 'zh-hans'
# 时区
TIME_ZONE = 'Asia/Shanghai'</font>
# True:格林威治时间 / False:保证数据库时间和现实时间同步
USE_TZ = False
3.试运行项目
3.1 cd 到项目根目录下,开启服务
cd /Users/lilianhong/PycharmProjects/project2
Python manage.py runserver 127.0.0.1:8090 # 指定ip地址和端口号
# 或者
Python manage.py runserver 8090 # 也可以直接指定端口号
3.2 访问django服务器,显示如下画面
http://127.0.0.1:8080/
4.配置路由
4.1 App包下(Project2>App>urls.py)建子路由urls.py
from django.urls import path
from App import views
urlpatterns = [
# path('子路由',关联的视图函数,路由的名字)
path("",views.index,name = 'index')
]
4.2 将子路由(Project2>App>urls.py)加载到根路由(Project2>Project2>urls.py),与其建立联系
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
# path("路由前缀",子路由)
path("user/",include("App.urls”)), # 将子路由加载到根路由,与其建立联系
]
4.3 配置视图(Project2>App>views.py)
def index(request):
return HttpResponse("Hello World")
4.4 开启服务,访问url
http://127.0.0.1:8090/user/
页面返回Hello World
5.配置带参数的路由
5.1 配置路由Project2>App>urls.py
path('show/<name>/<int:age>/', views.show,name='show’),
re_path(r'^call/(¥d{4}-¥d{8})/$',views.call, name='call'),
5.2 编写视图函数Project2>App>views.py
def show(request,name,age):
return HttpResponse(name + ":" + str(age))
def call(request,call):
return HttpResponse(call)
5.3 开启服务,访问URL
http://127.0.0.1:8090/user/show/lili/17/
http://127.0.0.1:8090/user/call/1234-12345678
页面各返回以下内容
lili:17
1234-12345678
6.请求与响应
6.1 get传参,配置路由Project>App>urls.py
path('req/' , views.req_res, name = 'reqres'),
6.2 get传参,编写视图函数Project>App>views.py
def req_res(request):
print(request.method)
print(request.GET.get("username")) # 如果不存在该username,会返回NONE
print(request.GET["username"]) # 如果不存在该username,会报错
print(request.GET.getlist('username')) # 获取请求列表
return HttpResponse('ok')
6.3 开启服务,分别访问URL
http://127.0.0.1:8080/user/req/?username=tom
127.0.0.1:8080/user/req/?user=tom
http://127.0.0.1:8080/user/req/?username=tom&username=jerry
浏览器返回:
ok
报错
ok
控制台返回:
tom
报错 ,None
[‘’tom,’jerry’]
7.页面跳转
7.1 配置路由Project2>App>urls.py
urlpatterns = {
# path('子路由',关联的视图函数,路由的名字)
path("", views.index, name='index'),
# 有参路由
path('show/<name>/<int:age>/', views.show, name='show'),
re_path(r'^call/(¥d{4}-¥d{8})/$',views.call, name='call'),
# 请求对象 === 响应对象
path('req/',views.req_res,name = 'reqres'),
}
7.2 创建模版 Project2>templates>show.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a href="/user/req/">请求对象</a>
</body>
</html>
7.3 编写视图函数 Project2>App>views.py
def show(request,name,age):
# return HttpResponse(name + ":" + str(age))
return render(request,'show.html')
def req_res(request):
print(request.method)
print(request.GET.get("username")) # 如果不存在该username,会返回NONE
print(request.GET["username"]) # 如果不存在该username,会报错
print(request.GET.getlist('username')) # 获取请求列表
# 获取请求路径
print(request.path) # /user/req/
# 获取来源页面
print(request.META.get("HTTP_REFERER")) # http://127.0.0.1:8080/user/show/lianhong/17/
# 获取客户端地址
print(request.META.get("REMOTE_ADDR")) # 127.0.0.1
return HttpResponse('ok')
7.4 开启服务,访问URL,实现页面跳转
http://127.0.0.1:8080/user/show/lianhong/17/
跳转到:http://127.0.0.1:8080/user/req/
请求路径为:/user/req/
客户端地址:127.0.0.1 (如果获取不到,清除浏览器缓存试试)
来源页面为:http://127.0.0.1:8080/user/show/lianhong/17/
8.重定向
8.1 配置路由Project2>App>urls.py
path(‘redirect_test//int:age’,views.redirect_test,name=‘redirect_test’),
app_name = “App”
from django.urls import path, re_path
from App import views
urlpatterns = [
# path('子路由',关联的视图函数,路由的名字)
path("", views.index, name='index'),
# 有参路由
path('show/<name>/<int:age>/', views.show, name='show'),
re_path(r'^call/(¥d{4}-¥d{8})/$',views.call, name='call'),
path('redirect_test/<name>/<int:age>',views.redirect_test,name='redirect_test'),
# 请求对象 === 响应对象
path('req/',views.req_res,name = 'reqres'),
]
8.2 重定向,编写视图函数Project2>App>views.py
def redirect_test(request,name,age):
# res = HttpResponse("ok")
# res.status_code = 300
# res.content = r'123'
# 例1
return HttpResponseRedirect('https://www.baidu.com') # 重定向到百度
# 例2
return HttpResponseRedirect("/user/") #重定向到首页http://127.0.0.1:8090/user/
# 例3
return HttpResponseRedirect("/user/show/{}/{}".format('nick',50)) #重定向到http://127.0.0.1:8090/user/show/nick/50/
# 例4-反向定位
return HttpResponseRedirect(reverse("App:index"))
# 例5-反向定位
return HttpResponseRedirect(reverse('App:show', kwargs = {'name':'admin','age':20}))
# 例6-反向定位
return HttpResponseRedirect(reverse("App:call",args=('1234-12345678')))
8.3 开启服务,访问URL,实现重定向
我们访问的URL是
http://127.0.0.1:8090/user/redirect_test/name/14
例1会重定向到百度网址
https://www.baidu.com
例2会重定向到首页http://127.0.0.1:8090/user/
例3会重定向到http://127.0.0.1:8090/user/show/nick/50/
例4反向定位到首页http://127.0.0.1:8090/user/
例5反向定位到http://127.0.0.1:8090/user/show/admin/20/
例6反向定位到首页http://127.0.0.1:8090/user/call/1234-12345678
⚠️注意
反向定位时要在子路由(Project2>App>urls.py)中添加命名空间
app_name = “App”,否则无法反向定位
9.错误视图
Django内置了处理HTTP错误的视图(在django.views.defaults包下),主要错误及视图包括:
403错误:permission_denied(权限拒绝)
404错误:page_not_found(找不到指定文件)
500错误:server_error(服务器内部错误)
错误及视图:
url匹配失败后,django会调用内置的django.views.defaults.page_not_found()函数,该视图函数会调用404.html的模版进行显示。
以下为错误视图配置步骤:
9.1 Project2>Project2>settings.py
中将DEBUG设成False
DEBUG = False
9.2 Project2>templates中新建错误页面模版
Project2>templates>404.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>oopts,您要访问的页面没有找到</h2>
</body>
</html>
Project2>templates>500.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>oopts,服务器出错了</h2>
</body>
</html>
9.3 访问未定义的URL,页面返回oopts,您要访问的页面没有找到
为定义的URL:http://127.0.0.1:8080/hh
在URL对应的视图函数views.py编写错误代码,print(1/0)
访问URL,页面返回oopts,服务器出错了
我的URL为http://127.0.0.1:8080/user/redirect_test/li/15
10.模版的渲染
10.1 loader加载
10.2 render
10.2.1 子路由下编写请求路径
Project2>App>urls.py
path('render_test/',views.render_test,name='render_test')
10.2.2 模版中编写变量{{name}}
Project2>templates>render_test.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h>{{name}}</h>
</body>
</html>
10.2.3 应用视图下渲染模版
Project2>App>view.py
def render_test(request):
return render(request,'render_test.html',context={'name':'admin'})
10.2.4 访问URL
http://127.0.0.1:8080/user/render_test
页面返回渲染的值:
admin