Django简介

news2024/12/30 2:20:01

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 path
    
    from 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)#登录用的id
    name =models.CharField(max_length=32)#名字
    password = models.CharField(max_length=64) #登录密码
    age = models.IntegerField()#年龄
    gender = models.IntegerField()#性别,男是0,女是1,或者更多,但应该不多于2^32
    major = 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创建的每个表都会自动创建一个递增的主键id
    name 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.coloradmin.cn/o/1664703.html

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

相关文章

Windows系统下通过nginx配置多项目

文章目录 前言大概思路实际操作记录&#xff1a;查看nginx 错误日志问下AI注意点&#xff1a; 当访问域名根路径时&#xff0c;重定向到/pc解决&#xff1a; 总结 前言 在windows电脑启动一个nginx 测试配置多前端项目&#xff0c;一个pc端&#xff08;vue3tsvite &#xff0c…

鸿蒙ArkUI:【编程范式:命令式->声明式】

命令式 简单讲就是需要开发用代码一步一步进行布局&#xff0c;这个过程需要开发全程参与。 开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 Objective-C ObjectiveC 复制代码 UIView *cardView …

【C/C++笔试练习】DNS设置文件、应用层、Dos攻击、DNS服务、DNS、子网划分、http状态、路由设置、TCP连接、HTTP状态码、剪花布条、客似云来

文章目录 C/C笔试练习选择部分&#xff08;1&#xff09;DNS设置文件&#xff08;2&#xff09;应用层&#xff08;3&#xff09;Dos攻击&#xff08;4&#xff09;DNS服务&#xff08;5&#xff09;DNS&#xff08;6&#xff09;子网划分&#xff08;7&#xff09;http状态&am…

嵌入式C语言高级教程:实现基于STM32的智能健康监测手环

智能健康监测手环能够实时监控用户的生理参数&#xff0c;如心率、体温和活动量&#xff0c;对于健康管理和疾病预防非常有帮助。本教程将指导您如何在STM32微控制器上实现一个基本的智能健康监测手环。 一、开发环境准备 硬件要求 微控制器&#xff1a;STM32L476RG&#xf…

进程间通信(二)

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

【数组算法】598. 区间加法

给你一个 m x n 的矩阵 M 和一个操作数组 op 。矩阵初始化时所有的单元格都为 0 。ops[i] [ai, bi] 意味着当所有的 0 < x < ai 和 0 < y < bi 时&#xff0c; M[x][y] 应该加 1。 在 执行完所有操作后 &#xff0c;计算并返回 矩阵中最大整数的个数 。 示例 1: …

户籍管理系统的设计与实现

【免费】户籍管理系统的设计与实现.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89296790 ​​​​​​​户籍管理系统的设计与实现 摘 要 当今社会人们生活质量越来越高&#xff0c;人们对生活品质的追求不断提升&#xff0c;对于孩子求学&#xff0c;变更住…

内容安全(AV)

防病毒网关&#xff08;AV&#xff09;简介 基于网络侧 识别 病毒文件&#xff0c;工作范围2~7层。这里的网关指的是内网和外网之间的一个关口&#xff0c;在此进行病毒的查杀。在深信服中就有一个EDR设备&#xff0c;该设备就是有两种部署&#xff0c;一个部署在网关&#xf…

C# WinForm —— 15 DateTimePicker 介绍

1. 简介 2. 常用属性 属性解释(Name)控件ID&#xff0c;在代码里引用的时候会用到,一般以 dtp 开头Format设置显示时间的格式&#xff0c;包含Long&#xff1a; Short&#xff1a; Time&#xff1a; Custom&#xff1a;采用标准的时间格式 还是 自定义的格式CustomFormat自定…

关于 vs2019 c++ 20规范,STL 库提供的标准分配器 alloctor 及其 traits 及涉及分配器交换的全局函数 _Pocs

(1) 我们写 c 代码&#xff0c;使用 STL 库中的模板&#xff0c;很少自己写对象的分配器。用 STL 中的分配器也够用。研究 STL 中的分配器也可以为咱们自己写分配器提供参考。 咱们会遇到这样的场景&#xff0c;例如交换两个容器对象&#xff1a; list a ,b ; a .swap (b) ; 这…

搭建一个Xx431?

搭建一个Xx431? 嘿uu们!刚结束了一周六天班感觉如何? 我的状态倒还行,工作生活总能找到乐子,本周整活就是用纸巾和蛋糕托做的油灯,另外想制冷片做个温水冷水可调的杯托,但我还不会搞3d,希望今年能搞起来. 题外话就说到这,这个选题也是因为实际遇到的问题需要这玩意,下班路…

初识java--javaSE(3)--方法,递归,数组,

文章目录 一 方法的使用1.1 什么是方法&#xff1f;main方法注意事项 1.2 方法的调用嵌套调用在方法调用时形参与实参的关系&#xff1a; 1.3 方法的重载方法重载的意义&#xff1f;总结方法重载&#xff1a;方法签名&#xff1a; 二 递归什么是递归&#xff1f;递归的精髓&…

做题杂记666

[XYCTF2024] 铜匠 题目描述&#xff1a; from Crypto.Util.number import * from secrets import flagm bytes_to_long(flag) m1 getRandomRange(1, m) m2 getRandomRange(1, m) m3 m - m1 - m2def task1():e 149p getPrime(512)q getPrime(512)n p * qd inverse(e,…

C++11:并发新纪元 —— 深入理解异步编程的力量(1)

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的Linux高性能服务器编程系列之《C11&#xff1a;并发新纪元 —— 深入理解异步编程的力量》&#xff0c;在这篇文章中&#xff0c;你将会学习到C新特性以及异步编程的好处&#xff0c;以及其如何带来的高性能的魅力&…

【学习笔记】HarmonyOS 4.0 鸿蒙Next 应用开发--安装开发环境

开发前的准备 首先先到官网去下载Devco Studio 这个开发工具&#xff0c;https://developer.harmonyos.com/cn/develop/deveco-studio/#download 提供了WIndows和Mac的开发环境&#xff0c;我自己是Windows的开发环境。 所以下载之后直接点击exe进行安装即可。 如果之前安装过…

nc生成临时凭证配置

nc生成临时凭证配置 要实现的功能&#xff1a; 审批时生成临时凭证弃审时删除临时凭证 前台配置 后台配置 BillReflectorServiceImpl.java package nc.pubimpl.jych.qtsq.voucher;import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; impo…

vue3专栏项目 -- 三、使用vue-router 和 vuex(下)

一、添加columnDetail 页面 首页有专栏列表&#xff08;ColumnList组件&#xff09;&#xff0c;专栏列表中有很多专栏&#xff0c;然后点击某个专栏就进入专栏详情页&#xff08;ColumnDetail组件&#xff09;&#xff0c;专栏详情页中有很多文章&#xff0c;点击某个文章就进…

【案例分享】校园服务小程序开发经验和主要功能,引领校园生活新方式

随着移动互联网的普及&#xff0c;学生们对于校园生活的需求也在不断增长。校园圈子、校园跑腿、校园外卖、校园服务等小程序等应用应运而生&#xff0c;为学生们提供了更加便捷、高效的生活方式。那么&#xff0c;如何开发一款能够满足学生需求的校园服务小程序呢&#xff1f;…

VTK官方示例

VTK官方示例 -vtk字體 #!/usr/bin/env python# noinspection PyUnresolvedReferences import vtkmodules.vtkInteractionStyle # noinspection PyUnresolvedReferences import vtkmodules.vtkRenderingFreeType # noinspection PyUnresolvedReferences import vtkmodules.vtk…