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…

【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…

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

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

前端开发指导

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

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

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

【数据分析】 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…

专项技能训练五《云计算网络技术与应用》实训8-1:建立基于OpenvSwitch的GRE隧道

文章目录 建立基于OpenvSwitch的GRE隧道1. 使用VMware安装2个CentOS 7虚拟机&#xff0c;安装时记得都开启CPU虚拟化&#xff0c;第一台命名为“Docker”&#xff0c;第二台命名为“KVM”。2. 安装完虚拟机后&#xff0c;进入虚拟机&#xff0c;修改网络配置&#xff08;onboot…

进程间通信(二)

共享内存 当进程A和进程B有一块共享的内存空间时&#xff0c;这两个进程之间的数据交互就会变的很简单&#xff0c;只需要像读取自己内存空间中的元素一样去读取数据即可。实现共享内存进行数据交互的一般步骤&#xff1a; 创建/打开共享内存内存映射数据交换断开与共享内存的…

任务:单域,域树的搭建

一、单域&#xff1a; 搭建所需的系统&#xff1a;win2016 sever&#xff0c;win10 1.在创建域前&#xff0c;先设置静态ip 先查看win2016 sever的IP&#xff0c; ip&#xff1a;192.168.154.133 网关&#xff1a;192.168.154.2 DNS服务器&#xff1a;192.168.154.2 设置…

【nodejs 命令行交互神器 - inquirer.js】

需求 大家在开发时&#xff0c;有时需要从命令行读取用户的输入&#xff0c;或者让用户选择。在nodejs中&#xff0c;这个怎么实现? 原生实现 ❌ process.stdin.setEncoding(utf8);process.stdin.on(readable, () > {let chunk;// 使用循环确保我们读取所有的可用输入wh…

局域网内监控软件有哪些:五款好用的网络监控神器分享

面对员工这种现象怎么办&#xff1f; 监控电脑最有效&#xff01; 局域网监控软件&#xff0c;你值得拥有&#xff01; 要想轻松监控电脑&#xff0c;这几款局域网内监控软件不容错过&#xff01;&#xff01;&#xff01; 一、域智盾软件 是一款专注于企业终端安全管理的软…

中职大数据专业介绍:大数据技术应用

近年来&#xff0c;人工智能在经济发展、社会进步、国际政治经济格局等方面已经产生重大而深远的影响。规划纲要对“十四五”及未来十余年我国人工智能的发展目标、核心技术突破、智能化转型与应用&#xff0c;以及保障措施等多个方面都作出了部署。 据2020年全国教育事业发展统…

两重惊喜!奥特曼预告GPT-4和ChatGPT重大更新,Open AI要放大招

OpenAI在今天官宣13日&#xff08;下周一10点&#xff09;开启线上直播&#xff0c;将会展示全新的ChatGPT demo的演示以及GPT-4的重大更新&#xff01; OpenAI首席执行官Sam Altman在X上表示&#xff0c;这些的发布会&#xff0c;公司不会宣布下一代对话式人工智能GPT-5或人工…