python_day17_Django-1

1、理论

理论来源:跟老齐学Python一书

1. 什么是HTTP
  访问网站经常要用到H TTP 。HTTP 是Hyper Text Transfer Protocol (超文本传输协议)的缩写,是客户端(比如计算机的浏览器、网络爬虫程序)和服务器端(网站〉请求和应答的标准 (T CP ),封装了Web 服务的整个过程。通常,由客户端发起请求,建立到服务器指定端口(默认是80 端口)的TCP 连接。服务器在指定端口监昕客户端的请求, 一旦收到,就向客户端返
回状态信息(比如“ HTTP/ 1.1 20。”)和内容信息(如请求的文件、错误消息或者其他信息),这就是响应。简单地说, HTTP 要做的事情如下。
• 请求( re quest ): 客户端到服务器端。
• 响应( response ):服务器端到客户端。
  HTTP/1.1 协议共定义了8 种请求方式,分别是: OPTIONS 、HEAD 、GET 、POST 、PUT 、DELETE 、TRACE 和CONNECT 。注意这些请求方式的名称都是大写,不要用小写。主要使用GET 和POST 两种请求,这也是Web 网站经常使用的两种请求方式。
• GET :向指定的服务器发出请求,主要用于读取信息并显示。
• POST :向指定服务器提交数据,请求服务器进行处理(例如提交表单或者上传文件) 。

python_day17_Django-1

1.1、web框架的本质

    a. 负责与浏览器收发消息(socket通信)    --> 按照http协议消息格式去解析消息
    b. 根据用户访问不同的路径执行不同的函数
    c. 从HTML读取出内容,并且完成字符串的替换  --> jinja2(模板语言)

1.2、一个完整得请求流程:

    0. 启动服务端,等待客户端(用户的浏览器)来连接
    1. 在浏览器地址栏输入URL,与服务端建立连接,浏览器发送请求
    2. 服务端收到请求消息,解析请求消息,根据路径和函数的对应关系,找到将要执行的函数
    3. 执行函数,打开HTML文件,进行字符串替换,得到一个最终要返回的HTML内容
    4. 按照HTTP协议的消息格式要求,把HTML内容回复给用户浏览器(发送响应)
    5. 浏览器收到响应的消息之后,按照HTML的规则渲染页面.
    6. 关闭连接

2、django入门

方式一: 命令行
    1、安装 pip install django 
    2、创建project
                django-admin startproject bg
    3、创建APP
                python manage.py startapp  bg
    4、启动
                python manage.py runserver port

方式二:直接使用ide自带的django

python_day17_Django-1

2.1、创建一个web项目

1、创建一个app 
      如 django manage.py startapp bg
2、修改项目bg的url文件
        from blog import views
        urlpatterns = [
                path('admin/', admin.site.urls),
                path('times/', views.times),
        ]   
        就相当于是一条路由 如 flask  @app.route('/')
3、修改app的文件 views.py文件
        from django.shortcuts import render, HttpResponse
        def times(request):
                return HttpResponse("hello world")
   request: 浏览器请求对象的打包文件
4、启动  python manage runserver

2.2、html模板

再来一个分支  如  想显示时间:  1跟2与上面一样
3、显示时间
from django.shortcuts import render, HttpResponse
import time
# Create your views here.

def times(request):
    Times = time.strftime('%Y-%m-%d %H:%M:%S')
    # 方法一
    # return render(request,'index.html', locals())

    # 方法二
    # return render(request,'index.html',{"time": Times})

4、在templates中新建一个index.html文件
   在html页面中的body体中添加
        # 方法一
            <h1>hello myworld {{ Times }}</h1>
        # 方法二
            <h1>hello myworld {{ time }}</h1>

python_day17_Django-1

2.3、django 静态文件

  如果要在html文件中导入jquery.js文件,那么还得需要配合static这个目录,在html文件中直接导入jquery文件 django是无法直接查找的,还得需要在创建的django项目的settings文件中修改static文件所在位置

官方static配置说明

1、增加 static目录  以及jquery.js文件

项目的settings中最后增加
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
]

2、app项目中增加
def tims(request):
    return render(request, 'index.html',)

3、url中增加
from blog import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('times/', views.times),
]

4、index.html修改
    <div>
        <h1>hello js</h1>
    </div>

<script src="/static/jQuery-3.3.1.js"></script>
<script>
    $('div h1').css('color', 'red')
</script>

5、目录结构

python_day17_Django-1

6、最后效果
python_day17_Django-1

2.4、js文件修改方式

1、普通用法  html文件中直接导入static跟jquery文件
    <div>
        <h1>hello js</h1>
    </div>

<script src="/static/jQuery-3.3.1.js"></script>
<script>
    $('div h1').css('color', 'red')
</script>

2、模板的方式导入js文件
    在head中加入     {% load staticfiles %}
    在Body中加入   <script src={% static "jQuery-3.3.1.js" %}></script>

2.5、django App添加

1、添加一个app
  本地文件路径>python3 manage.py startapplogin

2、配置文件中增加功能
  找到与目录同名的应用下的 project/settings.py
找到INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'login.apps.LoginConfig', 每次添加应用都需要添加这行
]

2.6、Django ORM

简要说明
ORM的对应关系:
类 ---> 数据表
对象 ---> 数据行
属性 ---> 字段

github地址,每次直接检出版本即可直接查看代码

2.6.1、创建表

使用Django的ORM详细步骤:
    1. 创建数据库
        create database 数据名;
    2. 在Django项目中设置连接数据库的相关配置(告诉Django连接哪一个数据库)    
    需要注意的是  这是在项目下的settings.py中添加, 这里是项目,项目!
# 数据库相关的配置
    DATABASES = {
            'default': {
                    'ENGINE': 'django.db.backends.mysql',
                    'HOST':'x.x.x.x',     # 主机地址
                    'PORT':3306,                  # 端口
                    'NAME':"test",               # 数据库名
                    'USER':"test",               # 用户名
                    "PASSWORD":"test"           # 密码
            }
    }
    3. 告诉Django用pymysql代替默认的MySQLDB 连接MySQL数据库
        在项目/__init__.py文件中,写下面两句:    
        需要注意的是 这个是在项目里添加,不是应用,不是应用,这里是项目
            import pymysql
            \# 告诉Django用pymysql来代替默认的MySQLdb
            pymysql.install_as_MySQLdb()
    4. 在app下面的models.py文件中定义一个类,这个类必须继承
    需要注意的是: 这里是应用,这里是应用
    from django.db import models

    \# 类名即是表名
    class DgOrm(models.Model):
            # 对象名即表名
            id =models.AutoField(primary_key=True)
            name = models.CharField(max_length=20)
    5. 执行两个命令
        1. python3 manage.py makemigrations
        2. python3 manage.py migrate

python_day17_Django-1

6.查看数据库,会发现生成了很多表,添加的表名称,以 应用名_创建的名称

python_day17_Django-1

 7. 文件说明

python_day17_Django-1

检出github版本后使用 git checkout master 可查看前7步代码

 8.查看数据库
   此处在创建的app如login中的views设置
from django.shortcuts import render, HttpResponse
from login import models

# Create your views here.

def list(request):
    ret = models.DgOrm.objects.all()
    # print(ret[0].id, ret[0].name)
    return render(request,"list.html",{"User_list":ret})
    # return HttpResponse(ret)

def add(request):
    if request.method == "POST":
        name = request.POST.get("name")
        models.DgOrm.objects.create(name=name)
    return render(request,"add.html")

然后在项目中的urls中导入该项目 
from login import views

urlpatterns = [
    .......
    path(r'list/', views.list),
    path(r'add/', views.add),
]
9. html模板序列自增
    table字段中 增加 {{ forloop.counter }}
代码示例
<table border="1">
    <thead>
    <tr>
        <th>序号</th>
        <th>ID</th>
        <th>NAME</th>
    </tr>
    </thead>
    <tbody>
    {% for foo in app_list %}
        <tr>
            <td>{{ forloop.counter }}</td>
            <td>{{ foo.id }}</td>
            <td>{{ foo.name }}</td>
        </tr>
    {% endfor %}
    </tbody>

2.6.2、删除

# 删除  此处在应用下的view中添加
def delete(request):
    print(request.GET)
        # 获取request的ID号
    del_id = request.GET.get("id")
    # 如果不为空删除这个ID值,并且返回list
    if del_id:
        models.app.objects.get(id=del_id).delete()
        return  redirect("/list/")
    return HttpResponse("没有这个ID或输入错误")

2.6.3、修改

if request.method == "POST":
            // 先获取到ID
        post_id = request.POST.get("schoolId")
                // 获取数据行
        old_name = models.school.objects.get(id=post_id)
                // 获取输入用户输入要修改的新行
        new_name = request.POST.get("schoolname")
                // 取到数据行中的name 将等于新行,保存,然后跳转到修改前的页面
        old_name.name = new_name
        old_name.save()
        return redirect("/list/")

git checkout a1 可直接查看代码。

2.6.4、外健关连

#  老师表关连学校ID
class Teacher(models.Model):
    # ID 自增长
    id = models.AutoField(primary_key=True)
    #  老师名字不能相同
    name = models.CharField(max_length=30, unique=True, null=False)
    # 外健关连学校  它会自动关连school的主健,在数据库中的表现是 sid_id
    # 需要注意的是 配置好数据库类的时候需要 重新运行以下命令
    # python manage.py makemigrations
    # python manage.py migrate
    sid = models.ForeignKey(to="school",on_delete="CASCADE")
    # 2之后就需要加上on_delete这个参数 参考 https://www.cnblogs.com/phyger/p/8035253.html

多表查询
git checkout a2 可查看代码

2.7、联合查询

待更新

1、查询语语   当id =1 时
                models.fwd_internet_addr.objects.filter(id=interadd).values("interadd")
2、语句等于  
              select name from table_name where id=1    
3、结果1
             <QuerySet [{'interadd': '10.1.1.1'}]>
4、最终展示结果
        xx.first().get("interadd") 可以直接将 字典取出来 结果 10.1.1.1

orm查询 接下章

转载于:https://blog.51cto.com/xiong51/2118280

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值