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': '登录失败'})