django基础教程(从0开发一个留言板)以及View视图函数总结

快期末了,没有太多时间学习技术,现在要进行学过的技术的回顾,本文通过记录自己开发一个留言板的功能去回顾一下大家django,具体会在寒假深入学习

1.环境配置

这里使用virtualenv进行配置,virtualenv命令生成一个虚拟环境,相当于把我们的python环境copy一份到这里来,它可以使我们的python多个版本在不同环境下工作(注意:在安装时可以使用-i指定一个国内源提升下载速度)

加粗样式
按以上思维导图笔记创建虚拟环境并且进入之后,创建文件与文件夹如图
在这里插入图片描述

2.配置前端页面显示

  • 先给出前端代码如下,并把以下代码放到新创建的HTML文件里面,也可以把css代码与html代码分开存放
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <link rel="stylesheet" href="/static/css/style.css">
	<style>
		.smart-green {
			margin-left: auto;
			margin-right: auto;
			max-width: 500px;
			background: #F8F8F8;
			padding: 30px 30px 20px 30px;
			font: 12px Arial, Helvetica, sans-serif;
			color: #666;
			border-radius: 5px;
			-webkit-border-radius: 5px;
			-moz-border-radius: 5px;
		}

		.smart-green h1 {
			font: 24px "Trebuchet MS", Arial, Helvetica, sans-serif;
			padding: 20px 0px 20px 40px;
			display: block;
			margin: -30px -30px 10px -30px;
			color: #FFF;
			background: #9DC45F;
			text-shadow: 1px 1px 1px #949494;
			border-radius: 5px 5px 0px 0px;
			-webkit-border-radius: 5px 5px 0px 0px;
			-moz-border-radius: 5px 5px 0px 0px;
			border-bottom: 1px solid #89AF4C;
		}

		.smart-green h1 > span {
			display: block;
			font-size: 11px;
			color: #FFF;
		}

		.smart-green label {
			display: block;
			margin: 0px 0px 5px;
		}

		.smart-green label > span {
			float: left;
			margin-top: 10px;
			color: #5E5E5E;
		}

		.smart-green input[type="text"], .smart-green input[type="email"], .smart-green textarea, .smart-green select {
			color: #555;
			height: 30px;
			line-height: 15px;
			width: 100%;
			padding: 0px 0px 0px 10px;
			margin-top: 2px;
			border: 1px solid #E5E5E5;
			background: #FBFBFB;
			outline: 0;
			-webkit-box-shadow: inset 1px 1px 2px rgba(238, 238, 238, 0.2);
			box-shadow: inset 1px 1px 2px rgba(238, 238, 238, 0.2);
			font: normal 14px/14px Arial, Helvetica, sans-serif;
		}

		.smart-green textarea {
			height: 100px;
			padding-top: 10px;
		}


		.smart-green .button {
			background-color: #9DC45F;
			border-radius: 5px;
			-webkit-border-radius: 5px;
			-moz-border-border-radius: 5px;
			border: none;
			padding: 10px 25px 10px 25px;
			color: #FFF;
			text-shadow: 1px 1px 1px #949494;
		}

		.smart-green .button:hover {
			background-color: #80A24A;
		}

		.error-msg{
			color: red;
			margin-top: 10px;
		}
		.success-msg{
			color: #80A24A;
			margin-top: 10px;
			margin-bottom: 10px;
		}
	</style>
</head>
<body>
<form action="/form/" method="post" class="smart-green">
    <h1>留言信息
        <span>请留下你的信息.</span>
    </h1>
    <label>
        <span>姓名 :</span>
        <input id="name" type="text" name="name" class="error" placeholder="请输入您的姓名"/>
        <div class="error-msg"></div>
    </label>

    <label>
        <span>邮箱 :</span>
        <input id="email" type="email" value="" name="email" placeholder="请输入邮箱地址"/>
        <div class="error-msg"></div>
    </label>

    <label>
        <span>联系地址 :</span>
        <input id="address" type="text" value="" name="address" placeholder="请输入联系地址"/>
        <div class="error-msg"></div>
    </label>

    <label>
        <span>留言 :</span>
        <textarea id="message" name="message"  placeholder="请输入你的建议"></textarea>
        <div class="error-msg"></div>
    </label>
    <div class="success-msg"></div>
    <label>
        <span>&nbsp;</span>
        <input type="submit" class="button" value="提交"/>
    </label>
</form>

</body>
</html>
  • 编辑视图逻辑,使用render函数
from django.shortcuts import render

# Create your views here.


def message_form(request):
    return render(request, 'message_form.html')
  • 编辑路由
from django.contrib import admin
from django.urls import path
from apps.message_form import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('message_form/', views.message_form)
]
  • 配置全局的static文件访问路径的配置STATICFILE_DIRS(自己加上的参数)
# 自己加上的


STATICFILES_DIRS=[
    os.path.join(BASE_DIR, 'static')
]

前端显示页面如下:
在这里插入图片描述
template的具体步骤与写法

3.使用MySQL数据库,并进行orm和model表设计

根据需求分析,设计表

# coding:utf-8
from django.db import models

# Create your models here.

class Message(models.Model):
    name = models.CharField(max_length=20, verbose_name='姓名', primary_key='True')# 设置name为主键
    email = models.EmailField(verbose_name='邮箱')
    address = models.CharField(max_length=100, verbose_name='联系地址')
    message = models.TextField(verbose_name='信息')

    # Meta的作用是用来定义表是干嘛的
    class Meta:
        verbose_name = '留言信息'
        verbose_name_plural = verbose_name
        # 如果不设置这个verbose_name_plural,在后台管理显示的时候,后台管理系统
        # 显示会自动在verbose_name后面加一个s
        db_table = 'message' # 设置表的名称,方便以后维护

我这里先后进行db_table = 'message’等测试,cmd命令以及输出如下
在这里插入图片描述

4.详解数据库的增删查改操作

1. 数据库的查操作
  • model名.object.all():获取数据库的所有对象
  • models名.object.get(查询条件):直接返回一个对象,而且只能返回一个,如果查到多个或者没有查到,就会报错,get()方法引用了SQL查询
  • models名.object.filter(查询条件),如果没有查到数据就会返回一个空的列表,在执行for循环操作之前,它是没有进行数据库的操作的
2.数据库的增操作
    message.name = 'chen'
    message.address = '深圳'
    message.email = 'chen@qq.com'
    message.save()

在数据库软件刷新可见数据更新了
在这里插入图片描述

3.数据库删除操作

可以使用delete方法

message.delete()

5.从前端中取出数据并保存到数据库

先讲几个知识点:

  1. django表单里面的action后面加的是URL,表示我们要将数据丢掉哪个页面,或者去哪个页面拿数据
  2. method定义我们用什么方式提交,一般在浏览器输入URL,或者只是刷新一下页面,使用get方法,但是如果涉及到对数据库的操作,提交数据等等,要使用POST()方法
  3. 前端表单中要加上{ csrf_token },不加的话,我们提交数据的时候浏览器会报403错误

实践:
在views.py中加上以下代码

if request.method == "POST":
       # 如果方法是POST(提交),我们就来取数据
       name = request.POST.get("name", "") # 第二个参数是一个默认值
       email = request.POST.get("email", "")
       address = request.POST.get("address", "")
       message_test = request.POST.get("message", "")
       message = models.Message()
       message.name = name
       message.email = email
       message.address = address
       message.message= message_test
       message.save()  # 将数据保存到数据库
   return render(request, 'message_form.html')

这里要注意我们必须把前面的一些实例的代码注释,我注释前报了这个错误,是根据这个文章解决的
解决办法
打开浏览器,输入数据提交
在这里插入图片描述
点击提交之后,查看数据库
在这里插入图片描述
由上图可见,我们的在网页上提交的数据以及被保存

6.django的templates数据显示

知识点介绍:
在django设计理念里面,尽力去限制了我们在HTML文件中过多的使用python逻辑,如果没有限制的话,虽然前期写起来很爽,但是在后期维护的时候,因为HTML,css文件是经常要改的,如果里面既有前端的逻辑,又有前端的逻辑,那么维护起来很困难,所以django里面不能随心所欲的在HTML里面写我们的逻辑,必须要到后端写(也可以换成jinja2或者mako模板)

  1. 继续编辑view逻辑;从前端取出数据
if request.method == 'GET':
        all_messages = models.Message.objects.all()
        if all_messages:
            message = all_messages[0]
        return render(request, 'message_form.html',{
            'message':message
        })
  1. 编辑template(添加上value,前端取数据需要使用{{ 键 }})
    <label>
        <span>姓名 :</span>
        <input id="name" type="text" name="name" value="{{ message.name }}" class="error" placeholder="请输入您的姓名"/>
        <div class="error-msg"></div>
    </label>

view视图

简介:
  • 当用户发起HTTP Request到服务器的时候,Django执行完URL的映射之后,就交由视图层进行逻辑的处理
  • Django的视图层会调用模型层的数据,除了直接返回一些字符串,一般都会调用,Django调用模型层的数据,然后渲染template文件,然后返回给用户
view视图层的功能
  • 根据收到的Http Resquest执行URL映射
  • 根据URL映射,调用视图函数,然后可以调用model层的数据
  • 进行逻辑的处理,例如add()
views视图层处理用户请求的函数
  • HttpResponse,直接返回内容。
  • render,返回一个渲染后的template页面。第一个参数是request,代表一个HTTP请求,第二个参数是template的URL,第三个参数是一个字典,在模板里面可以通过键调用
  • JsonResponse,返回json字符串
  • HttpResponseRedirect,重定向到另外的页面,返回状态码302
  • HttpResponseNotFound,返回404状态码
  • HttpResponseServerErorr,返回500状态码
  • request
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值