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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 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


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
10天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【4月更文挑战第9天】本文对比了Python三大Web框架Django、Flask和Pyramid。Django功能全面,适合快速开发,但学习曲线较陡;Flask轻量灵活,易于入门,但默认配置简单,需自行添加功能;Pyramid兼顾灵活性和可扩展性,适合不同规模项目,但社区及资源相对较少。选择框架应考虑项目需求和开发者偏好。
|
1天前
|
机器学习/深度学习 数据可视化 Linux
python用ARIMA模型预测CO2浓度时间序列实现
python用ARIMA模型预测CO2浓度时间序列实现
|
2天前
|
Python 数据可视化 索引
PYTHON用GARCH、离散随机波动率模型DSV模拟估计股票收益时间序列与蒙特卡洛可视化
PYTHON用GARCH、离散随机波动率模型DSV模拟估计股票收益时间序列与蒙特卡洛可视化
14 0
PYTHON用GARCH、离散随机波动率模型DSV模拟估计股票收益时间序列与蒙特卡洛可视化
|
2天前
|
机器学习/深度学习 存储 算法
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
25 7
|
2天前
|
vr&ar Python
Python 用ARIMA、GARCH模型预测分析股票市场收益率时间序列4
Python 用ARIMA、GARCH模型预测分析股票市场收益率时间序列
20 0
|
2天前
|
数据可视化 算法 Python
python中的copula:Frank、Clayton和Gumbel copula模型估计与可视化
python中的copula:Frank、Clayton和Gumbel copula模型估计与可视化
13 0
|
2天前
|
运维 数据可视化 Python
PYTHON中用PROPHET模型对天气时间序列进行预测与异常检测
PYTHON中用PROPHET模型对天气时间序列进行预测与异常检测
17 1
|
2天前
|
Python
Python随机波动率(SV)模型对标普500指数时间序列波动性预测
Python随机波动率(SV)模型对标普500指数时间序列波动性预测
10 1
|
3天前
|
机器学习/深度学习 Python
Python用PyMC3实现贝叶斯线性回归模型
Python用PyMC3实现贝叶斯线性回归模型
11 0
|
3天前
|
数据可视化 jenkins vr&ar
python3用ARIMA模型进行时间序列预测
python3用ARIMA模型进行时间序列预测
14 5