Django(3)基本流程(视图和模板的使用)

视图的基本使用:

概述: 在Django中,视图是对web请求进行回应

视图就是一个python函数,在views.py文件中定义。

定义视图:

myApp\views.py中写入

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.


def index(request):
    return HttpResponse("Sunck is a good man")

# def detail(request, num):
#     return HttpResponse("detail-%s" % num)


def detail(request, num, num2):
    return HttpResponse("detail-%s-%s" % (num, num2))

配置url: (path方法)

在版本Django2.x中,url的路由表示用path和re_path代替,

模块的导入由Django1.x版本的:

from django.conf.urls import url,include

变成现在的Django2.x中的:

from django.urls import path, re_path, include

修改project\urls.py文件:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('myApp.urls')),
]

 在myApp应用目录下创建urls.py文件:

from django.urls import path
# from . import views
# 一定要注意不要使用 . 相对路径,尽量设置sources root使用绝对路径

from myApp import views

urlpatterns = [
    path('', views.index),
    path('<int:num>/<int:num2>', views.detail),
]


# 进行测试:
# http://127.0.0.1:8000/
# http://127.0.0.1:8000/55/66 

 path路由讲解:https://www.cnblogs.com/cpl9412290130/p/9611293.html

https://www.cnblogs.com/polly-ling/p/9315645.html

模板的基本使用:

概述:模板是HTML页面,可以根据视图中传递过来的数据进行填充

创建模板目录:

创建templates目录,在目录下创建对应项目的模板目录(project/templates/myApp)

文件层级图:

templates 与 myApp 、project 同级,在templates下可以创建 存储应用模板,目前只有myApp一个应用。

配置模板路径:

修改settings.py文件下的TEMPLATES下的

'DIRS'

改为

'DIRS': [os.path.join(BASE_DIR, 'templates')]

BASE_DIR代表project所处目录C:User\desktop\Django\project

定义grades.html与students.html模板:

在templates\myApp\目录下创建grades.html 与 students.html模板文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>班级信息</title>
</head>
<body>
    <h1>班级信息列表</h1>
    <ul>
        <!--[python04, python05, python06]-->
        {% for grade in grades %}
        <li>
            <a href="#">{{grade.gname}}</a>
        </li>
        {% endfor %}
    </ul>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>学生页面</title>
</head>
<body>
    <h1>学生信息列表</h1>
    <ul>
        {%for student in students%}
        <li>
            {{student.sname}}--{{student.scontend}}
        </li>
        {%endfor%}
    </ul>
</body>
</html>

view.py 

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
from myApp.models import Grades, Students


def index(request):
    return HttpResponse("Sunck is a good man")

# def detail(request, num):
#     return HttpResponse("detail-%s" % num)


def detail(request, num, num2):
    return HttpResponse("detail-%s-%s" % (num, num2))


def grades(request):
    # 去模板里取数据
    gradesList = Grades.objects.all()

    # 将数据传递给模板,模板再渲染页面,将渲染好的页面返回给浏览器
    return render(request, 'myApp/grades.html',
                  {"grades": gradesList})


def students(request):
    studentsList = Students.objects.all()

    return render(request, 'myApp/students.html',
                  {"students": studentsList})

urls.py 

from django.urls import path
# from . import views
from myApp import views

urlpatterns = [
    path('', views.index),
    path('<int:num>/<int:num2>', views.detail),
    path('grades/', views.grades),
    path('students/', views.students),
]
  1. 在views.py中引入Grades、Students两个模型类
  2. 分别定义grades、students视图
  3. gradesList = Grades.objects.all()
  4. 网页中的数据取自grades、students

render函数

render(request, template_name, context=None, content_type=None, status=None, using=None)

Returns a HttpResponse whose content is filled with the result of calling django.template.loader.render_to_string() with the passed arguments.

此方法的作用---结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象。

通俗的讲就是把context的内容, 加载进templates中定义的文件, 并通过浏览器渲染呈现.

参数讲解:

  • request: 是一个固定参数, 没什么好讲的。
  • template_name: templates 中定义的文件, 要注意路径名. 比如'templates\polls\index.html', 参数就要写‘polls\index.html'
  • context: 要传入文件中用于渲染呈现的数据, 默认是字典格式
  • content_type: 生成的文档要使用的MIME 类型。默认为DEFAULT_CONTENT_TYPE 设置的值。
  • status: http的响应代码,默认是200.
  • using: 用于加载模板使用的模板引擎的名称。

访问关联连接(如:访问班级下学生信息)

**grades.html将href后改成*{{grade.id}}*
<h1>班级信息</h1>
<ul>
    {%for grade in grades%}
    <li>
        <a href="{{grade.id}}">{{grade.gname}}</a>
    </li>
    {%endfor%}
</ul>
**views.py新增函数**
def gradeStudent(request,num):
    #获得对应的班级对象
    grade = Grades.objects.get(pk=num)
    #获得班级下的所有学生对象列表
    studentsList = grade.students_set.all()
    return render(request,'polls/students.html',{"students":studentsList})
**urls.py新增url**
path('grades/<int:num>/',views.gradeStudent)

 

Django流程梳理
    创建工程:执行 django-admin startproject 工程名
    创建项目:执行 python manage.py startapp 项目名称
    激活项目:修改 settings.py中的INSTALLED_APPS
    配置数据库:
        修改__init__.py文件
        修改settings.py文件中的DATABASES
    创建模型类:在项目目录下的models.py文件中创建
    生成迁移文件:执行python manage.py makemigrations
    执行迁移:执行python manage.py migrate
    配置站点:略
    创建模板目录/项目模板目录
    在settings.py中的TEMPLATES添加templates路径
    在工程目录下(project)修改urls.py
    在项目目录下创建urls.py


使用他人Django代码需要的简易修改:
1.在settings.py中修改数据库名
2.在settings.py中修改数据库密码
3.删除由内向外文件(在对应目录里鼠标右键删除)
4.在数据库中创建对应第一步的数据库(自己在SQL中创建)
5.执行生成迁移文件
6.执行迁移
7.启动服务
8.浏览器测试
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值