武沛齐Django web学习 Django(一)

武沛齐Django web学习 Django(一)

初识django

1. 安装Django

pip install django
c:\python39
	- python.exe
	- Scripts
		- pip.exe
		- django-admin.exe	[工具,创建django项目中的默认文件和文件夹]
	- Lib
		- 内置模块
		- site-packages
			- flask
			- pymql
			- django	[框架的源码]

2. 创建项目

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

(本人用的专业版pycharm,直接就能创建)

默认项目的文件介绍:

mysite
|-- manage.py	【项目的管理,启动项目,创建app,数据管理】【***常常用***】	
|-- mysite
	|
	|-- __init__.py
	|-- urls.py		【url和函数的对应关系】【***常常修改***】
	|-- settings.py	【项目配置】【***常常修改***】
	|-- asgi.py		【接收网络请求】【不要动】
	|-- wsgi.py		【接收网络请求】【不要动】

3. APP

- 项目
	- app,用户管理	【表结构,函数,HTML,CSS】
	- app,后台管理	【表结构,函数,HTML,CSS】
	- app,网站	【表结构,函数,HTML,CSS】
	- app,API	【表结构,函数,HTML,CSS】
	··
	
注意:我们开发比较简洁,用不到多app
python manege.py startapp app01
├─app01
│  │  admin.py	【固定,不动】django默认提供了admin后台管理
│  │  apps.py	【固定,不动】app启动类
│  │  models.py	【**重要**】,对数据库操作
│  │  tests.py	【固定,不动】单元测试
│  │  views.py	【**重要**】,函数
│  │  __init__.py
│  │
│  └─migrations	【固定,不动】数据库变更记录
│          __init__.py

4. 快速上手

  • 确保app已注册

    在settings中INSTALLED_APPS中加一行:'app01.apps.App01Config',
    
  • 编写URL和视图函数的对应关系【urls.py】

  • 编写视图函数【views.py】
  • 启动Django项目

    • 命令行启动

      python manage.py runserver
      
    • pycharm启动

4.1 templates模板

# 去app目录下的templates目录寻找html文件(根据app注册顺序,逐一去他们的templates目录中寻找)

# 加上这个之后 'DIRS': [os.path.join(BASE_DIR, 'templates')],
# 优先去项目的根目录的templates中寻找

4.2 静态文件

在开发过程中一般将:

图片, CSS, JS 都会当作静态文件处理。

Django中推荐下面这样引入静态文件,这样如果改了路径,只需要修改配置文件就行

{% load static %}  

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1-dist/css/bootstrap.css' %}" >
</head>
<body>
<h1>添加用户</h1>
<img src="{% static 'img/1.jpg' %}" alt="" />

<script src="{% static 'js/jquery-3.7.1.min.js' %}"></script>
<script src="{% static 'plugins/bootstrap-3.4.1-dist/js/bootstrap.js' %}"></script>
</body>
</html>

5. 模板语法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>模板语法学习</h1>
    <div>{{ n1 }}</div>
    <div>{{ n2 }}</div>
    <div>{{ n2.0 }}</div>
    <div>{{ n2.1 }}</div>
    <div>{{ n2.2 }}</div>
    <div>
        {% for item in n2 %}
            <span>{{ item }}</span>
        {% endfor %}
    </div>
    <div>{{ n3.name }}</div>

    <hr/>

    <div>
        {% if n1 == '高宇轩' %}
        <h1>哈哈哈啊哈</h1>

        {% elif n1 == '大帅比' %}
        <h1>啦啦啦啦啦</h1>

        {% else %}
        <h1>嘿嘿嘿嘿嘿</h1>

        {% endif %}
    </div>
</body>
</html>

6. 请求和响应

def something(request):
    # request 是一个对象,封装了用户发送过来的所有请求相关数据

    # 1. 获取请求方式 GET/POST
    print(request.method)

    # 2. 在URL上传递一些值 http://localhost:8000/smt/?n1=123&n2=456
    print(request.GET)

    # 3. 在请求体中提交数据
    print(request.POST)

    # 4. HttpResponse("返回内容"),内容字符串返回给浏览器
    # return HttpResponse("返回内容")

    # 5. 读取HTML内容+渲染(替换)
    # return render(request, "something.html", {"title": "来了"})

    # 6. 让浏览器重定向到其他的页面
    return redirect('')

7. 数据库操作

Django开发操作数据库更简单,内部提供了ORM框架

ORM是一个翻译的过程

7.1 安装第三方模块

pip install mysqlclient

7.2 ORM

ORM可以帮我们做两件事:

  • 创建、修改、删除数据库中的表(不用写SQL语句)。【无法创建数据库】
  • 操作表中数据【也不用写SQL语句】
1. 自己创建数据库
2. django连接数据库

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

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.mysql",
        "NAME": "django",   # 数据库名字
        "USER": "root",
        "PASSWORD": "123",
        "HOST": "127.0.0.1", # 哪台机器安装了mysql
        "PORT": 3306,
    }
}
3. django操作表

创建表:在models.py中:

相当于

create table app01_userinfo(    
    id integer primary key autoincrement,   # 自动生成
    name varchar(32),
    password varchar(64),
    age int
)

执行命令:

注意:app需要提前注册

python manage.py makemigrations
python manage.py migrate
在这个过程中,本人碰到了这个报错

django.db.utils.NotSupportedError: MySQL 8.0.11 or later is required (found 5.7.31).

应该会有不少人和我一样

我们只需要找到django安装路径
D:\Code\Python\PythonLearning\Django_Learn\djangoProject_1\.venv\Lib\site-packages\django\db\backends\base

找到base.py

再找到这一行注释掉就可以了
  • 插入

    def orm(request):
        # 测试orm操作表中的数据
        # models.DepartmentInfo.objects.create(title="销售部")
        # models.DepartmentInfo.objects.create(title="IT部")
        # models.DepartmentInfo.objects.create(title="运营部")
    
        UserInfo.objects.create(name="高宇轩", password="123", age=19)
    
        return HttpResponse("成功")
    
  • 删除

        # 删除
        DepartmentInfo.objects.filter(id=1).delete()    # filte时筛选条件
        DepartmentInfo.objects.all().delete()       # all时全部删除
    
  • 获取数据

     #data_list = [对象, 行, 行] QuerySet类型
        data_list = DepartmentInfo.objects.all()
        for obj in data_list:
            print(obj.id, obj.name)
    
        data_list = UserInfo.objects.filter(id=1)
    
  • 更新数据

UserInfo.objects.all().update(password='999')
UserInfo.objects.filter(name="高宇轩").update(password='999')

8. 案例:用户管理

1. 展示用户列表

    • 获取所有用户信息
    • HTML渲染
def info_list(request):
    # 1. 获取数据库中所有的用户信息
    # [对象, 对象, 对象]
    haha_list = UserInfo.objects.all()
    print(haha_list)

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户列表</title>
</head>
<body>

<a href="/info/add/">添加</a>
<h1>用户列表</h1>
<table border="1">
    <thead>
    <tr>
        <th>ID</th>
        <th>姓名</th>
        <th>密码</th>
        <th>年龄</th>
        <th>操作</th>
    </tr>
    </thead>

    <tbody>
    {% for obj in haha_list %}
        <tr>
            <td>{{ obj.id }}</td>
            <td>{{ obj.name }}</td>
            <td>{{ obj.password }}</td>
            <td>{{ obj.age }}</td>
            <td>
                <a href="/info/delete/?nid={{ obj.id }}">删除</a>
            </td>
        </tr>
    {% endfor %}
    </tbody>
</table>
</body>
</html>

2. 添加用户

  • URL
  • 函数
    • GET,看到页面,输入内容。
    • POST,提交 -> 写入到数据库。
def info_add(request):
    if request.method == "GET":
        return render(request, "info_add.html")

    # 获取用户提交的数据
    user = request.POST.get("user")
    pwd = request.POST.get("pwd")
    age = request.POST.get("age")

    # 添加到数据库
    UserInfo.objects.create(name=user, password=pwd, age=age)

    return redirect("/info/list/")
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>添加用户</title>
</head>
<body>
<h1>添加用户</h1>
<form method="post" action="/info/add/">
    {% csrf_token %}		<--!>一定要加上这个</--!>
    <input type="text" name="user" , placeholder="用户名">
    <input type="text" name="pwd" , placeholder="密码">
    <input type="text" name="age" , placeholder="年龄">
    <input type="submit" value="提交">
</form>
</body>
</html>

3. 删除用户

def info_delete(request):
    nid = request.GET.get("nid")
    UserInfo.objects.filter(id=nid).delete()
    return redirect("/info/list/")

这里配合前面的用户列表,可以实现按钮删除

注意:表单提交要加上 {% csrf_token %}

转载请说明出处内容投诉
CSS教程_站长资源网 » 武沛齐Django web学习 Django(一)

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买