Django基础入门

1.安装django

pip install django

2.创建项目

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

2.1在终端

(1)打开终端

(2)进入某个目录(项目放在哪里)

/software/A-Python/python_code

1.默认项目的文件介绍:

(1)manage.py:用于对项目的管理,以及启动项目,创建app,做数据库的管理等等都是基于这个文件,我们常常使用但是我们一行代码都不用修改。

(2)wsgi.py和asgi.py:这两个文件都是网站用于接收网络请求的,前者是同步式的,后者为异步式的,我们也不用管,不需要修改。

(3)urls.py:用于写所有的URL和函数的对应关系,这是常常操作的文件(每写一个页面加上一个请求都要来这里写)。

(4)settings.py:用于写各种配置文件,比如链接数据库,它的用户名,密码这些都是写在这个文件中。以后用到那种配置,我们就需要在其中进行修改和添加配置。

2.APP (各自APP之间的的表结构,函数,HTML模版,CSS都可以是相互独立的,不相互影响,目的是为了共同完成一个项目)

3.创建app的方法:

在终端上输入:

python manage.py startapp app01

即可创建app01。

4.创建新app01后的各文件功能:

(1)views.py:主要是用于写URL对应的执行的函数(也就是urls.py所需对应的执行函数)

(2)models.py:专门用于我们对数据库进行操作(Django有自己专门的数据库orm,不需要使用mysql)。

(3)其余app的各类文件我们不需要去修改,不用管。

注意:APP在创建完成之后,我们还需要对其进行注册才能使用(setting.py中编写):

5.编写一个页面

(1)编写URL和视图函数之间的关系(在urls.py中编写):

(2)编写视图函数(在views.py中编写,该函数默认附带request)

6.templates模版

7.引用静态文件(static)(可以用于我们引用css,js,图片等需求)

在开发过程中一般将:

  • 图片
  • css
  • js

都会当做静态文件进行处理。故静态文件我们都放在static文件中。

(1)在app目录下创建static文件夹

(2)引用静态文件,Django中是不推荐使用绝对路径来引入我们需要的静态文件的,比如:

这种绝对路径我们以后需要修改项目名时会比较麻烦(因为写死了),我们更加推荐通过使用load static的方式来引入我们需要的静态文件:

8.模版语法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>模版语法学习</h1>
    <div>{{n1}}</div>
    <div>{{n2}}</div>

    <!--列表 roles-->
    <div>{{n2.0}}</div>
    <div>{{n2.1}}</div>
    <div>{{n2.2}}</div>

    <div>
        {% for item in n2 %}
            <span>{{ item }}</span>
        {% endfor %}
    </div>

    <!--字典 user_info -->
        {{n3}}
        {{n3.name}}
        {{n3.salary}}
        {{n3.role}}

    <ul>
{#        {% for item in n3.keys %}             <!--取user_info的键-->#}
{#        {% for item in n3.values %}           <!--取user_info的值-->#}
        {% for item in n3.items %}              <!--取user_info的键和值-->
            <li>{{ item }}</li>
        {% endfor %}
    </ul>

    <!--列表里套字典 data_list-->
    <hr>
        {{n4.0}}
        {{n4.1.name}}
        {{n4.1.role}}

        {% for item in n4 %}
            <div>{{item.name}} {{item.salary}}div></div>
        {%  endfor %}
    <hr/>

    <!--if语句-->
    {% if n1 == "杨晨" %}
        <h1>你要快乐</h1>
    {% else %}
        <h1>你要健康</h1>
    {% endif %}


</body>
</html>


本质上:在HTML中写一些占位符(如:{{xxx}}),由数据对这些占位符进行替换和处理。

处理流程如下:

注:浏览器拿到的永远是完完全全被替换完成的字符串。

9.案例:伪联通新闻中心

(1)

(2)

(3)

10.请求和响应

11.登录

(1)urls.py:

(2)login.html:

(3)views.py:

当我们浏览器中输入/login/时,我们会先执行urls.py中的

path('login/',views.login)

然后找到views.py中的login(request)函数并执行。首先是因为一开始输入值是GET类型,所以我们会执行

return render(request,"login.html")

因此我们会进入login.html中,也就是显示我们的登录界面,然后输入用户名和密码后我们点击提交此时是POST类型,此时我们会执行login(request)函数来获取用户提交的数据,此时又会区分为登录成功和登录失败。登录成功则会进入新的页面,登录失败则是会输出"用户名和密码错误"。

12.数据库操作

(1)MySQL数据库 + pymsql

import pymysql

# 1.连接MySQL
conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="201967yc", charset="utf8", db="unicom")            # 此处的user="root", passwd="201967yc"是你一开始设定好的,db="unicom"是你要创建的数据库。
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)                  # 基于cursor去发送指令。

# 2.发送指令
cursor.execute("insert into admin(username,password,mobile) values('杨晨','201967yc','13476068651')")             # 由于两边是双引号了内部想表达字符串则要用单引号。
conn.commit()                       # 提交命令

# 3.关闭
cursor.close()
conn.close()

(2)Django开发操作数据库更简单,内部提供了ORM框架。(ORM本质是一个翻译SQL语句的过程,不需要开发者自己编写SQL语句)

         ORM本身不能用于连接数据库,但它可以通过pymysql,mysqldb,mysqliclient这些作为底层去操作数据库,传统的MySQL操作数据库是通过sql语言去实现,而ORM则是对这些底层语言进行翻译,它会自动翻译成SQL语句,从而去数据库中执行,执行完之后再把结果拿回来返回给代码。

(2)安装第三方模块(django最新的版本pymysql支持的不太好,我们选择安装mysqlclient)

pip install mysqlclient
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/  pymysqlclient      

(3)ORM

ORM可以帮助我们做两件事:

<1>创建,修改,删除数据库中的表(不用你写SQL语句)。[但是ORM无法自动创建数据库,也需要你自己创建]

<2>操作表中的数据(不用写SQL语句)。

insert     into     update    select......

1.自己创建数据库

create database 数据库名字;            # 但是不建议直接这样写,因为一些编码的问题可能导致出现错误


create database 数据量名字 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;    # 建议用这个方法创建数据库,设置了数据库的默认字符集为utf8。(utf8支持中文)

创建叫xiaomi的数据库:

create database xiaomi DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 

xiaomi数据库创建成功:

2.Django连接数据库(django的厉害之处在于可以连接mysql还可以连接sqlite3,postgresql,oracle等一系列数据库)。

在setting.py文件中进行配置和修改。

Django中默认用的是sqlite3这个文件数据库,我们不需要用到它我们将其注释掉:

我们连接自己的MySQL数据库:

3.Django操作表

(1)创建表

(2)删除表

(3)修改表

(1)创建表:在models.py文件中写入一个类:

此处的类型就相当于我们数据库中的表名,name,password,age这些字段名就相当于我们数据库中的列名。

此时ORM底层会通过我们上面写的代码自动给我们创建一个表,表名叫它的app名称+_userinfo:

# ORM底层根据我们的代码创建的表
'''
create table app01_userinfo(
       id bigint auto_increment primary key,       # 此处id是django自动生成的。
       name varchar(32),
       password varchar(64),
       age int
)

'''

执行命令:(在终端中直接输入即可)

【注意】:执行命令前:在与 settings.py 同级目录下的__init__.py 中引入模块和进行配置__init__.py说明:__init__.py 是一个空文件,它在Python中起着非常重要的作用,主要用于标识一个目录为Python包。在Django项目中,它通常被用于标记与 settings.py 同级别的目录为一个包。这实际上是一种代码组织方式,可以帮助我们把相关的设置和文件组织在一起。此外,当其他模块需要导入 settings.py 中的变量和配置时,这个标记也是非常有用的。

_init_.py:

import pymysql

pymysql.install_as_MySQLdb()

如下(重要):

python终端输入(每次在app的models.py中执行写入一个表都要在终端中输入下面执行指令一遍):

python manage.py makemigrations
python manage.py migrate

python终端运行结果:

(注意:在执行前要确保(1)已经安装了mysqlclient(2)已经注册了app。)

去cmd终端查看创建表成功:

对于django框架中自带的app,我们可以选择不管,也可以注释掉。

(2)删除表:

<1>删除已经创建的表:

如果想删掉已经创建好的表,我们只需要在app的models.py中对齐进行注释,然后执行我们的命令:

python manage.py makemigrations
python manage.py migrate

这样就可以将我们之前创建的表删除掉。

<2>删除已经创建的字段:

直接对要删除的字段进行注释

再执行指令:

python manage.py makemigrations
python manage.py migrate

(3)修改表:

已经创建的表里添加字段:

写入后执行指令会出现两个选项第一个选项是在终端中直接给size赋值,第二个选项是我们在新增的字段函数里设置一个默认值:

size = models.IntegerField(default=2)

python终端运行如下图所示:

【小结】:以后在开发中如果想要对表结构进行调整(创建表,删除表,修改表)(彻底告别sql语句):

(1)在models.py文件中操作类即可。

(2)执行命令

python manage.py makemigrations
python manage.py migrate

14.操作数据库表中的数据

(1)models.py:

(2)views.py:

<1>新增表数据

<2>删除表数据

<3>获取表数据

<4>更新表数据

15.案例:用户管理(对user_info这张表进行管理)

15.1.展示用户列表

(1)urls.py

(2)函数

<1>获取所有用户信息

<2>HTML渲染

(1)urls.py

(2)views.py

(3)info_list.html

(4)程序运行流程:

首先在浏览器中输入info/list/,则程序会跳转至views.py中的info_list(request)函数中,此时info_list()函数执行UserInfo.objects.all()函数用于获取UserInfo表格中所有数据存储在给data_list列表中,然后执行函数:

  return render(request, "info_list.html", {"data_list":data_list})

函数的三个参数分别是request,模版名称(info_list.html)和字典(它包含了要传递给模版的数据)。在info_list.html中通过循环从data_list取出从数据库中获得的所有的数据并展现在页面中。

(5)运行结果:

15.2添加用户

(1)urls.py

(2)函数

<1>以GET请求看到页面,输入内容。

<2>以POST请求提交->写入到数据库。

(1)urls.py

(2)views.py

(3)info_add.html

(4)程序运行流程:

首先在浏览器中输入info/add/,则程序会跳转至views.py中的info_add(request)函数中,此时info_add()函数判断是否为GET请求(一开始在浏览器中输入info/add/一定就是GET请求,所以必然成立)接下来执行

return render(request,'info_add.html')

此函数用于将数据渲染到模板并生成HTML页面。这里有两个参数:request和模版名称(info_add.html),request包含了地方当前HTTP请求的所有信息,而模版名称则指定了要使用的HTML模版文件。最后这个函数返回一个包含渲染后HTML内容的HttpResponse对象。接着我们进入info_add.html,它创建了一个表单,表单中包含了"user","pwd","age",并且我们提交表单时是以POST请求方式进行提交。接着提交完成后,回到info_add(request)函数中执行获取用户数据的程序,并且将获取到的数据"user","pwd","age"添加到数据库中,添加完成后使其自动跳转到数据库页面进行展示。

(5)运行结果:

15.3删除用户

(1)urls.py

(2)函数

实现思路(伪代码):

http://127.0.0.1:8000/info/delete/?nid=1
http://127.0.0.1:8000/info/delete/?nid=2
http://127.0.0.1:8000/info/delete/?nid=3

def 函数(request):
    request.GET.get("nid")          # 获取我们在搜索框中输入的GET请求的nid的值。                    
    UserInfo.objects.filter(id=nid).delete()   
    

代码实现:

(1)urls.py

(2)views.py

(3)info_list.html

(4)运行结果:

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有梦想的小晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值