Django——路由

django-admin stratproject day3
启动项目的命令:python manage.py runserver 端口号
创建应用:python manage.py startapp app名称

Django项目是settings文件

BASE_DIR : 项目的根目录路径
DEBUG: 我们配置django项目的启动模式,这种方式启动之后执行过程中有错误会报错。
当DEBUG的值为False时 , 表示在生产环境中启动。
ALLOWED_HOSTS:可以设置允许访问这个项目的host请求头的值
[]:空列表表示只允许host请求头为本地地址即127.0.0.1或者localhost访问
['198.168.56.32' , '197.168.154.23',……]:表示允许被指定的ip地址可以访问
['*']:表示允许任何主机访问
INSTALLED_APPS:以字符串的形式注册应用。
MIDDLEWARE:注册中间件
ROOT_URLCONF:配置项目中根目录级别的urls文件
TEMPLATES:配置html文件存放的路径
DATABASES:配置指定的数据库
django会自动的配置sqlite数据库 , 小型的数据库
STATIC_URL: 静态文件配置

在django中是在urls文件中使用path函数讲路由和视图函数的对应关系进行映射。

视图函数

# views.py
# 视图函数
def index(request):
# 响应一个字符串数据
# HttpResponse 在内部传入一个字符串参数 , 接着返回给浏览器进行响应
return HttpResponse('大家好 , 明天就是疯狂星期四')
# urls.py
# 配置url
urlpatterns = [
path('admin/', admin.site.urls),
# 路由访问 : http://127.0.0.1:8000//index/
# path('index/', views.index),
path('index/', views.index)
]
# 响应前端页面
def text(request):
# render 将html文件模板化
# 将html文件 , 代替进入数据之后返回一个含有html标签的字符串
# 接着将字符串渲染之后返回给浏览器进行响应
# render(request , html文件名 , 字典数据)
return render(request , 'hello.html')
def info(request):
# render 传入的参数必须是字典类型
# return render(request , 'info.html' , {'name':'帅气的宇杰' , 'age':18})
data_dict = {'name':'叶鹏飞' , 'age':18}
return render(request , 'info.html' , data_dict)
def info2(request):
# locals方法:把当前所在的名称空间内的所有名字对应的数据全部都传递给html文件
# 这个方法当数据量比较多的时候可以使用 , 数据较少还是使用字典的形式比较好 ,
# 数据更加精确 , 节约资源
name = '某杰'
age = 20
return render(request, 'info.html', locals())
# redirect : 重定向,跳转url
def bd(request):
# 重定向 , url跳转
return redirect('https://baidu.com')

在django中路由配置就在urls文件中。

路由:用户可以使用url可以访问网上的资源 , 浏览器会根据url发送数据请求 , 服务器会根据请求的url去查询对应的关系 然后再把数据进行返回。

url的查找是从列表中从上往下查找。

在一个django项目中是可以存在多个urls.py文件进行url和视图函数的对应关系配置。但是只允许其中一个被作为路由的入口(所有urls的老大) , 这个入口都是在与项目同名的文件目录下的urls文件。并且在创建项目的时候以及自动的将这个文件配置到setting文件中了。

正则匹配路由:主要是用来对其进行分组 , 在进行对应关系的时候要使用re_path进行配置

使用():表示一个组

有名分组和无名分组

无名分组
url后面接收一个数据 , 传递到对应的视图函数中。
有名分组
(?P<name>正则表达式)
接收到的参数会以关键字参数传递给视图函数
# 无名分组 , 接收url后面的数据
re_path('text/(\d+)/' ,views.demo),
# 有名分组
re_path('text2/(?P<age>\d+)/' , views.demo2)
# 视图函数
def demo(request , data):
return HttpResponse(f'无名分组 , 接收到的数据:{data}')
def demo2(request , age):
return HttpResponse(f'有名分组 , 接收到的数据:{age}')

登录判断

def login(request):
# request , 请求方式 , 接收到的数据
# request 接收参数 request.请求方式.get(对应数据值的键)
# 获取请求方式 request.method
if request.method == 'GET':
return render(request , 'login.html')
'''
因为django的安全机制 , 不能直接获取到html中form中的数据
在from中写入{% csrf_token%}
'''
name = request.POST.get('user')
pw = request.POST.get('password')
# 判断密码是否正确
if name == 'ac' and pw == '456':
return redirect('http://www.cxy521.com/')
else:
return render(request , 'login.html',{'error': '登录失败'})