第二章--django--URL和视图函数

Posted HonyL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二章--django--URL和视图函数相关的知识,希望对你有一定的参考价值。

前言

Django 中的视图的概念是一类具有相同功能和模板的网页的集合。通俗一点来说,就是你平常打开浏览器,看到浏览器窗口展示出来的页面内容,那就是视图。
前面一章通过浏览器访问 http://127.0.0.1:8000 能在页面上展示出Django的内容,通常我们打开浏览器页面,展示的是一个html页面,本篇讲下如何打开html页面。

新建APP

上一篇通过django-admin startproject mysite是创建项目,一个项目下可以有多个应用(app);打开cmd,cd到manage.py所在目录使用如下输入指令创建一个应用:

python manage.py startapp app01

settings 配置文件参数说明

变量 说明
BASE_DIR 当前文件绝对路径
SECRET_KEY 秘钥
DEBUG 调试模式
ALLOWED_HOSTS
INSTALLED_APPS 应用程序定义
MIDDLEWARE 中间件
ROOT_URLCONF
TEMPLATES 模板配置
WSGI_APPLICATION
DATABASES 数据库
AUTH_PASSWORD_VALIDATORS 密码验证
STATIC_URL 静态文件配置

修改配置文件

在写代码前需要先修改相关配置:

  • templates

    HTML模板文件目录,一般创建工程时django会自动创建

  • static

    静态文件目录,例如:img、gif、CSS、javascript等等

  • settings文件修改部分:

  1. 添加HTML模板配置路径:
TEMPLATES = [
    {
        \'BACKEND\': \'django.template.backends.django.DjangoTemplates\',
        \'DIRS\':[os.path.join(BASE_DIR, \'templates\')],       # 修改部分
        \'APP_DIRS\': True,
        \'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\',
            ],
        },
    },
]
  1. 添加静态文件路径:
STATIC_URL = \'/static/\'
STATICFILES_DIRS = (os.path.join(BASE_DIR, \'static\'),)       # 修改部分
3. APP注册
INSTALLED_APPS = [
    \'django.contrib.admin\',
    \'django.contrib.auth\',
    \'django.contrib.contenttypes\',
    \'django.contrib.sessions\',
    \'django.contrib.messages\',
    \'django.contrib.staticfiles\',
    \'app01\',             # 添加自己的APP
]

视图和 URL绑定

视图函数中 HttpResponse 用法:

HttpResponse : 只支持字符串格式,传入的内容会直接在页面中显示

  1. 在mysite/app01/views.py里写视图函数:
from django.urls import path
from django.shortcuts import HttpResponse

def login(request):
    """    处理用户请求,并返回内容
    :param request: 用户请求相关的信息(对象)
    :return: 页面要显示的内容  
    """
    # HttpResponse  只接收字符串信息
    return HttpResponse("登录页面!")   # 传入什么内容,页面就显示什么内容。
  1. 在mysite/urls.py里写URL绑定视图:
from django.urls import path
from app01 import views

urlpatterns = [
    # URL 与视图函数进行绑定。
    path(\'login/\', views.login),   ]
  1. 启动服务后,打开 URL 页面显示:

视图函数中 render 用法:

render : 主要是给HTML模板进行渲染,将服务端的数据渲染后传入到页面中。

参数:request、\'HTML模板文件名\' 、{需要传递的数据}

ps: 最后一个参数为可选项,为字典格式。

  1. 在mysite/app01/views.py里写视图函数:
from django.urls import path
from django.shortcuts import HttpResponse

def login(request):
    """    处理用户请求,并返回内容
    :param request: 用户请求相关的信息(对象)
    :return: 页面要显示的内容  
    """
    # HttpResponse  只接收字符串信息
    return  render(request, \'login.html\') 

login.html文件在[mysite\\templates\\login.html] 路径下。
render 模块会根据[settings]配置文件,自动的从templates目录下查找对应的HTML模板文件,将读取内容返回页面。

  1. 在mysite/templates 目录下,创建login.html文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <h1>用户登录</h1>
    <input type="text" name="name">
</body>
</html>
  1. 在mysite/urls.py里写URL绑定视图:
from django.urls import path
from app01 import views

urlpatterns = [ # URL 与视图函数进行绑定。
                path(\'login/\', views.login),   ]
  1. 启动服务器后,打开 URL 页面显示:

视图函数中 redirect 用法:

redirect : 给页面加个[添加]跳转页面,在[添加]页面往数据库中添加数据后返回指定页面。

  1. 在mysite/app01/views.py里写视图函数:
from django.shortcuts import render, redirect

def index(request):
    if request.method == "POST":
        return redirect(\'http://www.baidu.com\')      # 配置跳转页面
    else:
        return render(request, \'index.html\')
  1. 在mysite/urls.py里写URL绑定视图:
from django.urls import re_path
from app01 import views   
urlpatterns = [
    re_path(r\'^index/\', views.index),  ]
  1. 在mysite/templates 目录下,创建index.html文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index</title>
</head>
<body>
    <form method="post" action="/index/">
        <input type="text" name="text">
        <input type="submit" name="提交">
	</form> 
</body>
</html>
  1. 启动服务器后,打开 URL 页面显示,单击按钮后跳转到百度页面:

案例

代码内容说明:
1. 用户登录页面,账号登录成功时,重定向到百度页面;
2. 登录失败时,返回用户登录页面,并提示登录失败;

# \\mysite\\mysite\\urls.py
from django.urls import path
from app01 import views
urlpatterns = [    # 绑定 URL 与视图函数。
                   path(\'login/\', views.login), ]

# \\mysite\\app01\\views.py
from django.shortcuts import render, redirect
def login(request):
    if request.method == "GET":
        return render(request, \'login.html\')
    else:
        # 用户post提交的数据
        u = request.POST.get(\'user\')  # 当 key 不存在时返回 None
        p = request.POST.get(\'pwd\')
        if u == \'root\' and p == \'123\':
            # 登录成功  redirect:重定向地址
            return redirect(\'http://www.baidu.com\')
        else:
            # 登录失败   模板渲染msg:特殊提示字符,与HTML中 msg 对应
            return render(request, \'login.html\', {\'msg\': \'账号或密码不对!\'})

# mysite\\templates\\login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
    <!-- 导入CSS文件  -->
    <link rel="stylesheet" href="/static/common.css">
</head>
<body>
    <h1> 用户登录 </h1>    <!--  字体改为红色 -->
    <form method="post" action="/login/">
        <!-- method 提交表单 -->
        <input type="text" name="user"/>
        <input type="pwd" name="pwd"/>
        <input type="submit" name="登录"/>
        {{ msg }}  <!--通过render方法传递数据  特殊提醒字符  提醒登录失败信息  -->
    </form>
</body>
</html>

以上是关于第二章--django--URL和视图函数的主要内容,如果未能解决你的问题,请参考以下文章

Django — URL和视图函数

Django url 模式不是注册的视图函数或模式

Django URL(路由系统)

Django UrL 解析

django url 反响解析,视图

django url反向解析