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兼顾灵活性和可扩展性,适合不同规模项目,但社区及资源相对较少。选择框架应考虑项目需求和开发者偏好。
|
2天前
|
Python
基于Django的Python应用—学习笔记—功能完善
基于Django的Python应用—学习笔记—功能完善
|
2天前
|
BI 开发者 数据格式
Python代码填充数据到word模板中
【4月更文挑战第16天】
|
3天前
|
Python
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
37 0
|
4天前
|
前端开发 数据挖掘 API
使用Python中的Flask框架进行Web应用开发
【4月更文挑战第15天】在Python的Web开发领域,Flask是一个备受欢迎的轻量级Web框架。它简洁、灵活且易于扩展,使得开发者能够快速地构建出高质量的Web应用。本文将深入探讨Flask框架的核心特性、使用方法以及在实际开发中的应用。
|
6天前
|
关系型数据库 数据库 开发者
Python中的Peewee框架:轻量级ORM的优雅之旅
【4月更文挑战第13天】在Python的众多ORM框架中,Peewee以其轻量级、简洁和易于上手的特点,受到了许多开发者的青睐。Peewee的设计理念是“小而美”,它提供了基本的ORM功能,同时保持了代码的清晰和高效。本文将深入探讨Peewee的核心概念、使用场景以及实战应用,帮助读者更好地理解和使用这一框架。
|
6天前
|
SQL API 数据库
Python中的SQLAlchemy框架:深度解析与实战应用
【4月更文挑战第13天】在Python的众多ORM(对象关系映射)框架中,SQLAlchemy以其功能强大、灵活性和易扩展性脱颖而出,成为许多开发者首选的数据库操作工具。本文将深入探讨SQLAlchemy的核心概念、功能特点以及实战应用,帮助读者更好地理解和使用这一框架。
|
17天前
|
前端开发 测试技术 数据库
【python】为什么使用python Django开发网站这么火?
【python】为什么使用python Django开发网站这么火?
|
关系型数据库 MySQL 定位技术
Python web框架 之Django + Python3.7 + 集成百度地图【视频讲解】
python集成百度地图 介绍 python集成百度地图demo
441 0
Python web框架 之Django + Python3.7 + 集成百度地图【视频讲解】
|
3月前
|
前端开发 数据库 Python
使用 Python 的 Web 框架(如 Django 或 Flask)来建立后端接口,用于处理用户的请求,从数据库中查找答案并返回给前端界面
【1月更文挑战第13天】使用 Python 的 Web 框架(如 Django 或 Flask)来建立后端接口,用于处理用户的请求,从数据库中查找答案并返回给前端界面
80 7