Django简介

Django

1.安装Django

pip install django

python的包的分布

\python- python.exe- Scripts- pip.exe- django-admin.exe  [工具,创建django项目]- Lib- 内置模块- site-packages 		[安装的包]- pymysql- flask- django 					[框架的源码]

2.创建项目

Django项目会有一些默认的文件和默认文件夹

2.1 终端

  • 进入终端

  • 进入某个目录(Django项目存放位置)

    >>> D:
    >>> cd/PycharmProjects
    >>> dir
    >>> cd ..
    
  • 执行命令创建项目

    “D:\python\Scripts\django-admin.exe” startproject 项目名称
    #已加入环境变量
    django-admin startproject 项目名称
    

2.2 Pycharm

直接创建Django项目就好

#settings.py里面的
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [BASE_DIR / 'templates']#相较于终端建立,多了这句,会优先在根目录的templates找模板,然后再去app目录下的templates找,'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]

默认项目的文件介绍

├─manage.py 		[项目的管理,启动项目、创建app、数据管理,不用修改]
│
├─mysite
│      __init__.py
│      settings.py		【项目配置文件】
│      urls.py				【URL和函数的对应关系】【需要写】
│      asgi.py				【接收网络请求】【不要动】
│      wsgi.py				【接收网络请求】【不要动】
│
└─templates

3. APP

- 项目- app,用户管理	【表结构、函数、HTML、CSS模板】- app,订单管理	【表结构、函数、HTML、CSS模板】- app,后台管理	【表结构、函数、HTML、CSS模板】- app,网站		 【表结构、函数、HTML、CSS模板】- app,API			 【表结构、函数、HTML、CSS模板】..

python终端中创建app:

python manage.py startapp  APP名称
├─app01
│  │  admin.py					【固定,不用动】 dajango默认提供了admin后台管理
│  │  apps.py						【固定,不用动】app启动类
│  │  models.py					【**重要**】,对数据库操作
│  │  tests.py					【固定,不用动】单元测试
│  │  views.py					【**重要**】视图函数
│  │  __init__.py
│  │
│  └─migrations					【固定,不用动】数据库迁移记录
│          __init__.py

4.启动Django

  • 确保app已注册

    INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','app01.apps.App01Config' #setting中注册app,在创建的app的apps.py中找到name和Config
    ]
    
  • 编写URL和视图函数对应关系 (urls.py)

    from django.contrib import admin
    from django.urls import pathfrom app01 import views
    urlpatterns = [#path('admin/', admin.site.urls),#www.xxx.com/index/ --> 执行函数path('index/', views.index),            #在app01的views.py中找index函数
    ]
    
  • 编写视图函数(view.py)

    from django.shortcuts import render,HttpResponse# Create your views here.def index(request): #必须带一个request参数return HttpResponse("Hello, world. You're at the index")
    
  • 启动Django项目

    • 命令行启动

      python manage.py runserver
      
    • Pycharm

      启动Django项目即可,注意默认的端口是8000,而酷狗音乐喜欢占用8000,需要关闭

4.1 templates模板

def user_list(request):#去app目录下的templates目录寻找哦user_list.html (根据app的注册顺序,逐一去它们的 templates找),render是重定向的意思,定向到这个网页return render(request, "user_list.html")

4.2 静态文件

开发过程中一般将:

  • 图片
  • CSS
  • js

都会当作静态文件处理,需要放在对应app目录下的static文件夹内

static- css- js- img- plugins

引用static文件:

{% load static %}
<!--传入static的路径--><!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>用户列表</title><link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.css' %}"
</head>
<body><h1>用户列表</h1><script src="{% static 'js/jquery-3.7.1.js' %}"></script>
<script src="{% static 'plugins/bootstrap-3.4.1/js/bootstrap.js' %}"></script>
</body>
</html>

5.Django模板的语法

def tpl(request):name = "Zeus"roles=["top","jungle","mid","ad","sup"]player_info={"name":"Jackeylove","role":"ad","age":"25"}data_list=[{"name": "Jackeylove", "role": "ad", "age": "25"},{"name": "369", "role": "top", "age": "25"},{"name": "Meiko", "role": "sup", "age": "25"}]return render(request, 'tpl.html', {"n1":name,"n2":roles,"n3":player_info,"n4":data_list})
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>Django模板语法学习</h1><div>{{ n1 }}</div><div>{{ n2 }}</div><!--获取单个元素,可以是列表--><div>{{ n2.0 }}</div><div>{{ n2.1 }}</div><div>{{ n2.2 }}</div><!--获取列表中的单个元素,使用.-->
<div><!--for 循环-->{% for item in n2 %}<span>{{ item }}</span>{% endfor %}
</div>
<hr/>
<!--字典元素-->
{{ n3 }}
{{ n3.name }} <!--根据key获得单个value-->
{{ n3.salary }}
{{ n3.role }}<ul>{%  for item in n3.keys %}<!--for循环获取键--><li>{{ item }}</li>{% endfor %}{%  for item in n3.values %}<!--for循环获取值--><li>{{ item }}</li>{% endfor %}{%  for item in n3.items %}<!--for循环获取键值--><li>{{ item }}</li>{% endfor %}</ul>
<!--列表里面嵌套字典(通过.来获取)-->
{{ n4.1.name }}
{{ n4.1.role }}{% for item in n4 %}<div>{{ item.name }} {{ item.roles }}</div>
{% endfor %}
<hr/>
<!--条件语句-->
{% if n1 == "Zeus" %}<h1>世一上</h1>
{% elif n1 == "The Shy" %}<h1>断手</h1>
{% else %}<h1></h1>
{% endif %}
</body>
</html>

总结

  1. 获取单个值(可以是列表,可以是字典):

     {{ [传入名称] }}
    
  2. 获取列表中的单个值

    {{ [传入名称].i}}
    
  3. 字典元素

    对于单个字典元素,有key,value,item三个属性,对于字典,有keys,values,items三个属性

  4. for循环

    {% for item in [遍历的列表或字典] %}<!--html样式,在这里会重复列表或字典的长度次数-->
    {% endfor%}
    
  5. 条件语句

    {% if (p)%}<!--html样式-->
    {% elif (p1) %}<!--html样式-->
    ...
    {% else %}<!--html样式-->
    {% endfor %}
    

6.请求和响应

def something(request):#request是一个对象,封装了用户通过浏览器发送过来的所有数据#1.获取请求方式print(request.method)#2.在URL上传递的值,用GET可以得到print(request.GET)#3.在请求体中提交的数据print(request.POST)#响应#4.HttpResponse("返回内容"),内容字符串内容返回给请求者#return HttpResponse("返回内容")#5.读取html的内容,加上渲染,生成新的字符串,返回给用户浏览器#return render(request,'something.html',{"title":"来了"})#6.重定向到其他页面return redirect("http://www.bilibili.com")

​ redirec方法是Django收到重定向后,将网址返回给请求者,由请求者自己转移到对应网址。

案例 用户登录

在以POST方式返回用户名和密码时,遇到这种情况:

在这里插入图片描述

此时需要在用户登录的form表单中,加入{% csrf_token %}

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>登陆</title><link rel="stylesheet" href="../static/css/log_in_green.css"/>
</head>
<body>
<h1>用户登录</h1>
<form method="post" action="/login/">{% csrf_token %}<input type="text" name ="user" placeholder="用户名"/><input type="password" name="user" placeholder="密码"/><input type="submit" value="提交"/></form>
</body>
</html>

7.Django连接数据库

1.创建数据库

  • 启动数据库
  • 自带工具创建数据库
create database library DEFAULT CHARSET utf8 COLLATE utf8_general_ci

2.django连接数据库

​ 在settings.py文件中进行配置和修改

在setteings对DATABASES进行更改:

DATABASES={'default':{'ENGINE':'django.db.backends.mysql',#表示可连接mysql,可将mysql改为sqlite3,'NAME':'library',#写想连接的数据库的名字'USER':'root',#用户名'PASSWORD':horse030811,#密码'HOST':'127.0.0.1',#MySQL是哪台机器'PORT':3306,#端口}
}

3.django操作表

  • 创建表
  • 删除表
  • 修改表

在models.py文件中,通过定义类来完成表的创建:

class StudentInfo(models.Model):#必须继承models.Model的内容user_id = models.CharField(max_length=20)#登录用的idname =models.CharField(max_length=32)#名字password = models.CharField(max_length=64) #登录密码age = models.IntegerField()#年龄gender = models.IntegerField()#性别,男是0,女是1,或者更多,但应该不多于2^32major = models.CharField(max_length = 20)#专业email = models.CharField(max_length=32)#邮箱,找回密码时可用grade = models.CharField(max_length=10) #年级#上述代码将由orm翻译为对应sql语句create table app01_studentinfo(#表的名称是 app名称+ _ + calss类的小写id bigint auto_increment primary key #orm创建的每个表都会自动创建一个递增的主键idname varchar(32),password varchar(64),age int...
)
models的类型
  1. AutoField

    一个自增的IntegerField,想要自定义主键,那么需要填上primary_key,一般不用,django会自动地为每一张表添加自增主键。

     uid = models.AutoField(primary_key = True)
    
  2. CharField

    用来存储字符串(必须指定长度,且小于254个字符)

    name = models.CharField(max_length=20,default='xxx') #max_length必须指定
    
  3. DateField

    保存日期,记录年月日,在数据库中也是date类型,有如下几个参数:

    auto_now =True:每次保存对象时,自动设置该字段为当前时间(可用于修改字段)

    auto_now_add = True:对象第一次被创建时自动设置当前地时间,自动保存的时间的时区使用的时默认时区(可用于创建字段)

    test_edit_time = models.DateField(auto_now = True)
    test_create_time = models.DateField(auto_now_add=True)
    
  4. DateTimeField

    相较于DateField,这个更常用,可保存日期和时间,也有类似的参数

    test_edit_time = models.DateTimeField(auto_now = True)
    test_create_time = models.DateTimeField(auto_now_add=True)
    
  5. TextField

    用于存储大字符串(大于254个字符),是数据库中的longtext类型

  6. IntegerField

    整型,32位bits,还有BigIntegerField,从 − 2 63 到 2 63 − 1 -2^{63}到2^{63}-1 2632631

  7. BinaryField

    存储二进制的字段,只支持bytes赋值

  8. BooleanField

    存储True或False,在数据库中是tinyint类型,若没指定默认值,则位None。如果可能为null,则需要将类型设置为NullBooleanField

  9. FloatField

    浮点数,即float

  10. UUIDField

    用来存储UUID的字段,使用的是python的UUID类

写好model后,表还没被创建,还需要在终端执行命令(app需要提前注册):

python manage.py makemigrations
python manage.py migrate#需要mysqlclient包

就可以生成表了,表时INSTALLED_APPS(settings.py)中注册的app(包含默认的表)

修改表
一个已经生成的表,如果在models里面删去了某个值,那么再makemigrations和migrate后,表中对应的列将会消失。

​ 如果在models中增加了一个值(即增加了一列),就产生了一个问题,表中原有的元组中的新属性的值是什么?此时映射后,终端会提示你做出选择:

  1. Provide a ont-off default now(will be set on all existing rows with a null value for this column)
  2. Quit,and let me add a default in models.py

输入1和2进行选择

输入1,则需要输入一个希望的默认值。

输入2,则直接退出,提示在models里设定好默认值(default=xx)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/835722.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java spring 10 Bean的销毁过程 上 在docreatebean中登记要销毁的bean

1.Bean销毁是发送在Spring容器关闭过程中的 AnnotationConfigApplicationContext context new AnnotationConfigApplicationContext(AppConfig.class);UserService userService (UserService) context.getBean("userService");userService.test();// 容器关闭cont…

Linux函数

目录 一、脚本函数 1.1 创建函数 1.2 使用函数 二、函数返回值 2.1 默认的退出状态码 2.2 使用return命令 2.3 使用函数输出 三、在函数中使用变量 3.1 向函数传达参数 3.2 在函数中处理变量 四、数组变量和函数 4.1 向函数中传递数组 4.2 从函数中返回数组 五、函数…

【1】STM32·FreeRTOS·新建工程模板【一步到位】

目录 一、获取FreeRTOS源码 二、FreeRTOS源码简介 2.1、FreeRTOS源码文件内容 2.2、FreeRTOS内核 2.3、Source文件夹 2.4、portable文件夹 三、FreeRTOS手把手移植 3.1、FreeRTOS移植准备 3.2、FreeRTOS移植步骤 3.2.1、将 FreeRTOS 源码添加至基础工程、头文件路径等…

基于Matplotlib的模型性能可视化工作

一、项目简介 本项目是科技考古墓葬识别工作的中间过程&#xff0c;因为需要大量复用所以另起一章好了。 主要涉及到数据读取、数据可视化和少量的数据处理过程。 二、相关知识 PandasMatplotlib 三、实验过程 1. 数据探索性分析 1.1 准备工作–导入模块 import pandas…

用python写个控制MicroSIP自动拨号和定时呼叫功能(可用在小型酒店叫醒服务)MicroSIP定时拨号

首先直接上结果吧&#xff0c;MicroSIP 助手&#xff0c;控制MicroSIP自动拨号&#xff0c;定时呼叫的非常实用小工具&#xff01; 在使用MicroSIP 助手之前&#xff0c;我们需要了解MicroSIP是什么&#xff0c;MicroSIP是一个SIP拨号软件&#xff0c;支持注册任意SIP平台实现拨…

【xxl-job | 第三篇】SpringBoot整合xxl-job

文章目录 3.SpringBoot整合xxl-job3.1定时任务服务配置3.1.1导入maven依赖3.1.2yml配置3.1.3XxlJobConfig配置类3.1.4定时任务类 3.2xxl-job配置3.2.1新增执行器3.2.2新增任务3.2.3执行任务3.2.4查看日志3.2.5查看任务后台日志 3.3小结 3.SpringBoot整合xxl-job 3.1定时任务服…

AppBuilder低代码体验:构建雅思大作文组件

AppBuilder低代码体验&#xff1a;构建雅思大作文组件 ​ 在4月14日&#xff0c;AppBuilder赢来了一次大更新&#xff0c;具体更新内容见&#xff1a;AppBuilder 2024.04.14发版上线公告 。本次更新最大的亮点就是**新增了工作流&#xff0c;低代码制作组件。**具体包括&#x…

区块链链底层架构,IPFS,DAPP

目录 区块链链底层架构 IPFS,DAPP等去中心化应用实现机制和运行原理 DApp到底在哪运行,举例说明

Python梯度下降算法

梯度下降&#xff08;Gradient Descent&#xff09;是机器学习中用于最小化损失函数的优化算法。在Python中&#xff0c;可以通过手动实现或使用现有的库&#xff08;如scikit-learn&#xff09;来应用梯度下降算法。以下是手动实现简单线性回归问题的梯度下降算法的示例&#…

聚合工程搭建、工程依赖导入

上一章讲了自动化云测平台的一些环境的准备 如果还未完成云服务器的环境搭建和本地环境的搭建&#xff0c;请点击左侧 -> 传送门 那么正式开始这一章的内容 聚合工程搭建 创建项目 我们先给项目命个名&#xff1a;xxx-meter&#xff0c;构建系统&#xff0c;我们选择M…

前端开发指导

前端开发指导 本文介绍了配置前端开发环境需要的软件、配置项等,指导如何开始进行UDM部门前端开发的全流程。本文以Windows系统下在Microsoft Virtual Studio Code中开发为基础。 一、综述 目标:零基础或者新员工依照此文档,能够完成开发环境的搭建及熟悉测试环境的搭建。…

VBScript字符串赋值注意事项

VBScript中字符串是用双引号来包裹。 单引号在VBScript里是注释符&#xff0c;不过如果要放在字符串里的话&#xff0c;直接写在双引号的字符串里就可以&#xff0c;跟其他字符比起来&#xff0c;并不特殊。 双引号如果要放在字符串里&#xff0c;则需要处理一下&#xff0c;可…

代码审计平台sonarqube的安装及使用

docker搭建代码审计平台sonarqube 一、代码审计关注的质量指标二、静态分析技术分类三、使用sonarqube的目的四、sonarqube流程五、docker快速搭建sonarqube六、sonarqube scanner的安装和使用七、sonarqube对maven项目进行分析八、sonarqube分析报告解析九、代码扫描规则定制十…

【Python 常用脚本及命令系列 1.2 -- python 判断串口是否已经打开】

请阅读【嵌入式开发学习必备专栏】 文章目录 判断串口是否打开 判断串口是否打开 要在Python中打印串口的波特率并检查特定的串口&#xff08;例如COM19&#xff09;是否已经打开&#xff0c;你可以使用pyserial库。这个库提供了跨平台的串口通信功能。首先&#xff0c;确保安…

python之异常机制处理

1.异常机制 1_1 try和except&#xff1a; 异常&#xff1a;程序无法继续执行了&#xff0c;例如&#xff1a;字符串和数字相加&#xff0c;除以0&#xff0c;对None进行操作 中断当前程序执行&#xff0c;然后打印出红字 Exception error 捕捉异常的方式&#xff1a;关键…

【数据分析】 JupyterNotebook安装及使用简介

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 在数据分析中&#xff0c;一般用Pycharm编辑代…

codeforces round 149 div2(a,b,c,d)

手速场&#xff0c;可惜我傻逼卡 c c c了 题目链接 A #include<bits/stdc.h>using namespace std;#define int long long #define PII pair<int,int>void solve() {int n,k;cin>>n>>k;if(n<k){cout<<1<<\n;cout<<n<<\n;}…

VSCode:设置顶部文件标签页滚动条的宽度

使用VSCode打开多个文件后&#xff0c;顶部的文件标签可以通过滚动条进行滚动&#xff0c;但是缺点是该滚动条太窄了&#xff0c;不好选择。 可以通过如下方法修改改滚动条的宽度&#xff1a; 1.点击设置 2.选择工作台->编辑管理->Title Scrollbar Sizing->Large 3.可…

书生浦语训练营第四次课作业

基础作业 环境配置 拷贝internlm开发机内的环境 studio-conda xtuner0.1.17# 激活环境 conda activate xtuner0.1.17 # 进入家目录 &#xff08;~的意思是 “当前用户的home路径”&#xff09; cd ~ # 创建版本文件夹并进入&#xff0c;以跟随本教程 mkdir -p /root/xtuner0…

无需关注---使用docker-compose部署你的springboot框架的java项目

version: ‘3’ services: springboot: image: openjdk:11-jre-slim ports: - “20221:20221” volumes: - ./2022.jar:/app/2022.jar working_dir: /app command: [“java”, “-Xmx256m”, “-Xms128m”, “-jar”, “2022.jar”] # 调整堆内存大小 restart: always environm…