一、路由器
1、概念
- 简单的说,url 就是常说的网址,每个网址代表不同的网页
- 在 django 中,url 也称为 urlconf
- 每个url地址对应一个唯一的 views 视图函数
2、哪里有路由?
- 根目录中的
urls.py
是根路由,根路由可以集合所有应用路由 - 每个应用下创建自己的
urls.py
,这个urls.py
属于每个应用的独有路由,通过集成到根路由中使用
3、绑定路由
项目路由绑定应用路由的写法,是在项目 urls.py
中写的;
# 导入 admin 功能模块
from django.contrib import admin
# 导入 url 编写模块
# include 将应用中的urls包含进来
from django.urls import path,include
# url集合
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('demoapp.urls')) # 【区别】直接导入的
]
# 导入 admin 功能模块
from django.contrib import admin
# 导入 url 编写模块
from django.urls import path,include
# 导入 demoapp 应用的 urls 并命名为 demoapp_urls
# 【区别】先导入,再引用
from demoapp import urls as demoapp_urls
# url集合
urlpatterns = [
path('admin/', admin.site.urls),
path('', include(demoapp_urls)) # 【区别】
]
二、创建视图步骤
1、创建视图文件
from django.http import HttpResponse
def index(request):
return HttpResponse('Hello Dajngo')
2、创建应用urls 文件
#coding:utf-8
# 用新的写法,按照项目 urls.py 中的写法写
from django.urls import path
# 引入视图
from .views import index
urlpatterns = [
path('', index)
]
3、应用注册别忘了
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'demoapp'
]
4、项目中的 urls.py
绑定 应用中的urls.py
# 导入 demoapp 应用的 urls 并命名为 demoapp_urls
from demoapp import urls as demoapp_urls
# url集合
urlpatterns = [
path('admin/', admin.site.urls),
path('demoapp/', include(demoapp_urls))
]
5、启动
# 启动命令行
python manage.py runserver
# 访问
http://127.0.0.1:8000/demoapp/
python manage.py runserver 0.0.0.0:9999
项目下的 settings.py 文件下
# 白名单
ALLOWED_HOSTS = ['*']
说明:
# 允许所有主机
ALLOWED_HOSTs = ['*']
# 指定单个主机名
ALLOWED_HOSTS = ['www.yourwebsite.com']
# 指定多个主机名
ALLOWED_HOSTS = ['www.yourwebsite.com', 'yourwebsite.com', 'sub.yourwebsite.com']
# 响应环境变量
import os
ALLOWED_HOSTS = os.getenv('DJANGO_ALLOWED_HOSTS', 'localhost').split(',')
三、路由参数
1、query 参数
http://127.0.0.1:8000/demoapp/?name=gognxin&age=26
def index(request):
name = request.GET.get('name', '默认姓名')
age = request.GET.get('age', 18)
return HttpResponse(f'姓名: {name},年龄: {age}')
# return HttpResponse('姓名: {0},年龄: {1}'.format(name, age))
# 注意:是通过 . 调用
显示:
姓名:gognxin,年龄:26
【访问路径】
http://0.0.0.0:5203/demoapp/testone?message=test
【views.py 文件】
from django.views.generic import View
from django.http import HttpResponse
class TestOne(View):
def get(self, request):
message = request.GET.get('message', '没有message参数')
return HttpResponse(f'参数:{message}')
【urls.py 文件】
from django.urls import path
from .views import TestOne
urlpatterns = [
path('testone', TestOne.as_view(), name='testOneName')
]
2、路径参数
http://127.0.0.1:8000/demoapp/gognxin/26
# 1、先修改 应用 的 utls.py,定义接收的参数
urlpatterns = [
path('<str:name>/<int:age>', index)
]
# 2、views.py 接参数
def index(request, name, age):
return HttpResponse(f'姓名: {name},年龄: {age}')
【访问路径】
http://0.0.0.0:5203/demoapp/testone/message_value
【views.py 文件】
from django.views.generic import View
from django.http import HttpResponse
class TestOne(View):
def get(self, request, message):
return HttpResponse(f'参数:{message}')
【urls.py 文件】
from django.urls import path
from .views import TestOne
urlpatterns = [
path('testone/<str:message>', TestOne.as_view(), name='testOneName')
]
四、基于对象的视图创建步骤
1、视图文件
#coding:utf-8
# 引入基础的视图类 View
from django.views.generic import View
from django.http import HttpResponse
class Index(View):
# 在 Django 基于类的视图中,方法名 get\post\put\delete 等具有特殊含义,直接对应http协议中的请求方式
def get(self, request, name, age):
# dir() 用来列出一个对象的所有属性和方法
print(dir(request))
return HttpResponse(f'姓名: {name},年龄:{age}')
2、路由 应用级的utls.py
#coding:utf-8
# from django.conf.urls import url
from django.urls import path
from .views import Index
urlpatterns = [
# as_view() 用于将基于类的视图 转换为可以被Django路由系统调用的视图函数
path('<str:name>/<int:age>', Index.as_view())
]
3、访问
http://127.0.0.1:8000/demoapp/gongxin/25
五、修改编码和时区【配置修改】
项目创建完成后,修改项目的配置文件 DemoDjango6/DemoDjango6/settings.py
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
六、[附] 常用的 request 方法
# 获取路径上的查询参数
request.GET
# 获取POST 提交的数据
request.POST
# 请求的路径,比如 127.0.0.1/test/1 那就返回 /test/1
request.path
# 请求的方法 比如 get\post
request.method
# 请求过来的 cookies
request.COOKIES
# 请求的用户对象,可以通过它判断用户是否登录,并获取用户信息
request.user
# 一个可读可写的类似字典的对象,表示当前会话
request.session
# 包含所有的HTTP首部信息
request.META
七、[附] 常用的返回对象
# 可以直接返回一些字符串内容
HttpResponse
from django.http import HttpResponse
# 将数据在模板中渲染并显示
render
from django.shortcuts import render
# 返回一个json数据
JsonResponse
from django.http import JsonResponse
八、 [附] url 变量类型
<str:name>
字符串类型,匹配任何非空字符串,但不包括斜杠,在不指定类型的前提下,默认字符串类型
<int:age>
整型,匹配 0 和 正整数
<slug:day>
注释、后缀、附属 等概念
<uuid: uid>
匹配一个 uuid 格式的对象,类似 xxx-xx-xx
虚拟环境 Virtualenv
python 的虚拟环境的包,为了解决同一台电脑中,有多个python版本的项目,比如有的项目是 python2.7
有的是python3.6,解决不同版本之间,环境变量相互污染的问题
python virtualenv
2-2 已经看完