Python:Django框架搭建,跑通流程

18 篇文章 0 订阅

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值