Python全栈 Web(Django框架、模板继承、模型)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
全局流量管理 GTM,标准版 1个月
简介: Flask、Python、Django、框架、服务器、客户端、浏览器、交互、WEB、Python前端、CSS、JAVA、HTML、H5、PHP、JavaScript、JQuery、分布式开发、项目、flask项目、项目实战、django框架、Python项目、Python的Flask框架、Python.
模板的继承:
    语法:
        在父模板中
          必须要标识出那些内容在子模板中允许为修改
          {% block 名称 %}
          {% endblock %}
        在子模板中
          指定继承自那个父模板
          {% extends '父模板名称' %}
          增加block标签 改写属于自的内容
          {% block 名称 %}
          {% endblock %}


        block的作用:
            在父模板中正常显示
            在子模板中 如果不修改的话 则按父模板的内容显示
            要是修改的话则按照子模板的内容显示


<!doctype html>
<html>
 <head>
  <meta charset="UTF-8">

  <title>{% block title %}天天果园-会员登录{% endblock %}</title>

	<link rel="stylesheet" href="/static/css/login.css">
    {% block style %}
    {% endblock %}
 </head>
 <body>
  <div id="container">
		<!-- 上 :会员登录 -->
		<h2>{% block header %}会员登录{% endblock %}</h2>
		<!-- 下左:登录图像 -->
		<p>
			<img src="/static/images/huiyuan.jpg">
			{% block anchor %}
			<a href="{% url 'register' %}">会员注册></a>
            {% endblock %}
		</p>
		<!-- 下右:登录表单 -->
      {% block from %}
		<div id="login">
			<form action="login" method="post">
				<!-- 第一行:手机号 -->
				<div class="form-line">
					<p>手机号</p>
					<div>
						<input type="text" name="uphone" class="form-control">
					</div>
				</div>
				<!-- 第二行:密码 -->
				<div class="form-line">
					<p>密码</p>
					<div>
						<input type="password" name="upwd" class="form-control" placeholder="请输入密码">
					</div>
				</div>
				<!-- 第三行:记住密码,忘记密码-->
				<div class="form-line">
					<p></p>
					<div>
						<!-- 右浮动 -->
						<p>
							<a href="#">忘记密码</a>
							<a href="#">快捷登录</a>
						</p>
						<!-- 不浮动 -->
						<input type="checkbox" name="isSaved" class="isSaved" checked>记住密码
					</div>
				</div>
				<!-- 第四行:登录按钮-->
				<div class="form-line">
					<p></p>
					<div>
						<!-- 右:超链接  -->
						<a href="#" class="goReg">注册会员</a>
						<!-- 左:登录按钮 -->
						<input type="submit" value="登录" class="btnLogin">
					</div>
				</div>
			</form>
		</div>
      {% endblock %}
	</div>
 </body>
</html>



利用注册继承登录的模板 这样就可以直接使用登录界面的样式
把想修改的的不笨用继承的方式进行修改就可以


{% extends "login.html" %}

{% block style %}
    <style>
        #login{
            margin-top: 20px;
        }
    </style>
{% endblock %}

{% block title %}
    天天果园.会员注册
{% endblock %}

{% block header %}
    会员注册
{% endblock %}

{% block anchor %}
    <a href="{% url 'login' %}">会员登录</a>
{% endblock %}

{% block from %}
		<div id="login">
			<form action="login" method="post">
				<!-- 第一行:手机号 -->
				<div class="form-line">
					<p>手机号</p>
					<div>
						<input type="text" name="uphone" class="form-control">
					</div>
				</div>
				<!-- 第二行:密码 -->
				<div class="form-line">
					<p>密码</p>
					<div>
						<input type="password" name="upwd" class="form-control" placeholder="请输入密码">
					</div>
				</div>
				<!-- 第三行:确认密码 -->
				<div class="form-line">
					<p>确认密码</p>
					<div>
						<input type="password" name="cpwd" class="form-control" placeholder="确认密码">
					</div>
				</div>
				<!-- 第四行:用户名 -->
				<div class="form-line">
					<p>用户名</p>
					<div>
						<input type="password" name="uname" class="form-control" placeholder="用户名">
					</div>
				</div>
				<!-- 第五行:邮箱 -->
				<div class="form-line">
					<p>用户名</p>
					<div>
						<input type="password" name="email" class="form-control" placeholder="邮箱">
					</div>
				</div>
				<!-- 第六行:登录按钮-->
				<div class="form-line">
					<p></p>
					<div>
						<!-- 右:超链接  -->
						<a href="#" class="goReg">会员登录</a>
						<!-- 左:注册按钮 -->
						<input type="submit" value="注册" class="btnLogin">
					</div>
				</div>
			</form>
		</div>
{% endblock %}




    re_path的name参数:
        re_path(regex, views, kwargs=None, name=None)
        name:为了给当前URL地址起别名的  主要用于URL的反向解析时使用
        反向解析:
            通过别名找到对应的地址
            re_path(regex, views, kwargs=None, name="别名")
        在模板中反向解析:
            1.基本解析
                {% url "别名" %}
            2.带参数解析
                {% url "别名" "参数1" "参数2"... %}


urlpatterns = [ re_path(r"^login/$", login_views, name="login"), ]


    <a href="{% url 'login' %}">会员登录</a>


        在视图中反向解析:
            1.基本解析
                url = reverse("别名")
                url就是通过别名解析出来的地址
            2.带参数解析:
                url = reverse("别名", args=(参数1, 参数2...))
                url就是通过别名解析出来的地址



def reverse_views(request):
    # url = reverse("login")
    url = reverse("arguments", args=("2018", "07"))
    return HttpResponse("解析的地址为:" + url)


模型 Models:
    什么是模型?
       根据数据库表创建出来的class
    ORM三大特征:
        表到类的映射
        数据类型的映射
        关系的映射
    创建数据库:
        create database webdb default charset utf8 collate utf8_general_ci;
    数据库的配置:
        setting.py中配置数据库信息
        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.sqlite3',
                'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
            }
        }
        链接到mysql
            ENGINE:mysql:django.db.backends.mysql
            NAME:连接到的数据库名
            USER:登录到数据库的用户名
            PASSWORD:登录到数据库的密码
            HOST:连接到的主机地址
            PORT:指定端口  MySQL默认3306

# Database
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': "webdb",
        "USER": "root",
        "PASSWORD": "ParisPython",
        "HOST": "localhost",
        "PORT": 3306
    }
}



    数据库的同步操作:
        ./manage.py makemigrations
          作用:
            将每个应用下的models.py文件生成一个数据库的中间文件
            并将中间文件保存在 migrations的目录中
        ./manage.py migrate
          作用:
            将每个应用中的migrations目录中的中间文件同步到数据库
    编写Models:
        示例:

from django.db import models

# Create your models here.


# 在index应用中的models.py中
# 创建一个实体类
# Publisher
# 用于表示出版社
class Publisher(models.Model):
    # 属性如下
    # name:出版社的名称(varchar)
    name = models.CharField(max_length=30)
    # address:出版社所在地址(varchar)
    address = models.CharField(max_length=200)
    # city:出版社所在城市(varchar)
    city = models.CharField(max_length=50)
    # country:出版社所在国家(varchar)
    country = models.CharField(max_length=50)
    # website:出版社网站(varchar
    website = models.URLField


class Author(models.Model):
    name = models.CharField(max_length=30)
    age = models.IntegerField()
    email = models.EmailField(null=True)
    # True表示用户的激活状态
    # 由于是新增列 所以必须要给默认值后允许为空
    # 由于BlooeanField默认值是不允许为空的  所以此处选择增加默认值
    isActive = models.BooleanField(default=True)


class Book(models.Model):
    title = models.CharField(max_length=50)
    publicate_data = models.DateField()


    Models的语法规范:
        class ClassName(models.Model):
            属性 = models.字段类型(字段选项)
            字段类型:映射到数据库表中的数据类型
                CharField() -varchar
            字段选项:
                max_length=30

        字段类型(Filed Type):
            BooleanField()
                编程语言中用True和False表示该列的值
                数据库中使用1和0来表示具体的值
                数据类型为:tinyint
            CharField()
                字符串
                数据类型为是varchar
            DataField()
                编程语言中使用字符串或data类型的数据表示值
                数据库中使用时间和字符串
                数据类型为:data  日期时间
            DatetimeField()
                数据类型为:datetime  精确到十分秒
            DecimalField()
                数据类型为decimal
                money = models.DecimalField(max_digits=7, decimal_places=2)
            FloatField()
                数据类型为float
            IntegerFiled()
                数据类型为:int
            EmailField()
                数据类型:varchar
            URLField()
                数据类型为:varchar
            ImageFiled()
                存储图片的路径
                数据类型为varchar
                image = models.ImageField(upload_to="images/users")
        字段选项(Field options):
            default
                为当前字段指定默认值
            null
                指定当前字段是否允许为空 默认为False
            primary_key
                指定是否为主键
            db.column
                指定当前字段映射到列表中类的名字
                如果不指定采用属性名作为字段名
    相关指令:
        通过数据库自动导出models
            ./manage.py inspectdb > 文件名.py
        数据的版本切换
            ./manage.py migrate
            执行所有应用中最新版本的数据库中间文件
            ./manage.py migrate 应用名称 版本号
            执行指定应用中的指定版本的中间文件
            ./manage.py migrate index 0002


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
关系型数据库 数据库 数据安全/隐私保护
Python Web开发
Python Web开发
14 6
|
6天前
|
开发框架 前端开发 JavaScript
利用Python和Flask构建轻量级Web应用的实战指南
利用Python和Flask构建轻量级Web应用的实战指南
18 2
|
9天前
|
SQL 安全 PHP
探索PHP的现代演进:从Web开发到框架创新
PHP是一种流行的服务器端脚本语言,自诞生以来在Web开发领域占据重要地位。从简单的网页脚本到支持面向对象编程的现代语言,PHP经历了多次重大更新。本文探讨PHP的现代演进历程,重点介绍其在Web开发中的应用及框架创新,如Laravel、Symfony等。这些框架不仅简化了开发流程,还提高了开发效率和安全性。
16 3
|
8天前
|
前端开发 JavaScript 开发工具
从框架到现代Web开发实践
从框架到现代Web开发实践
18 1
|
9天前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
21 1
|
8天前
|
Web App开发 测试技术 数据安全/隐私保护
自动化测试的魔法:使用Python进行Web应用测试
【10月更文挑战第32天】本文将带你走进自动化测试的世界,通过Python和Selenium库的力量,展示如何轻松对Web应用进行自动化测试。我们将一起探索编写简单而强大的测试脚本的秘诀,并理解如何利用这些脚本来确保我们的软件质量。无论你是测试新手还是希望提升自动化测试技能的开发者,这篇文章都将为你打开一扇门,让你看到自动化测试不仅可行,而且充满乐趣。
|
数据安全/隐私保护 Python
20 Django模板 - 模板继承
20 Django模板 - 模板继承
68 0
|
SQL 关系型数据库 MySQL
【Django学习笔记 - 11】:模板的继承、模型类和数据库
【Django学习笔记 - 11】:模板的继承、模型类和数据库
189 0
【Django学习笔记 - 11】:模板的继承、模型类和数据库
|
数据安全/隐私保护 Python
Django 模板继承4.2
Django 模板继承4.2
173 0
Django 模板继承4.2

热门文章

最新文章