第二章--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 页面显示:
    第二章--django--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 页面显示:
    第二章--django--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 页面显示,单击按钮后跳转到百度页面:
    第二章--django--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>
上一篇:nginx增加自定义账号鉴权


下一篇:三层架构