0


武沛齐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 %}  

<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><linkrel="stylesheet"href="{% static 'plugins/bootstrap-3.4.1-dist/css/bootstrap.css' %}"></head><body><h1>添加用户</h1><imgsrc="{% static 'img/1.jpg' %}"alt=""/><scriptsrc="{% static 'js/jquery-3.7.1.min.js' %}"></script><scriptsrc="{% static 'plugins/bootstrap-3.4.1-dist/js/bootstrap.js' %}"></script></body></html>

5. 模板语法

<!DOCTYPEhtml><htmllang="en"><head><metacharset="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. 请求和响应

defsomething(request):# request 是一个对象,封装了用户发送过来的所有请求相关数据# 1. 获取请求方式 GET/POSTprint(request.method)# 2. 在URL上传递一些值 http://localhost:8000/smt/?n1=123&n2=456print(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

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 插入deform(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渲染
definfo_list(request):# 1. 获取数据库中所有的用户信息# [对象, 对象, 对象]
    haha_list = UserInfo.objects.all()print(haha_list)return render(request,"info_list.html",{"haha_list": haha_list})
<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>用户列表</title></head><body><ahref="/info/add/">添加</a><h1>用户列表</h1><tableborder="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><ahref="/info/delete/?nid={{ obj.id }}">删除</a></td></tr>
    {% endfor %}
    </tbody></table></body></html>

2. 添加用户

  • URL
  • 函数 - GET,看到页面,输入内容。- POST,提交 -> 写入到数据库。
definfo_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/")
<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>添加用户</title></head><body><h1>添加用户</h1><formmethod="post"action="/info/add/">
    {% csrf_token %}        <--!>一定要加上这个</--!><inputtype="text"name="user",placeholder="用户名"><inputtype="text"name="pwd",placeholder="密码"><inputtype="text"name="age",placeholder="年龄"><inputtype="submit"value="提交"></form></body></html>

3. 删除用户

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

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

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

标签: django 学习

本文转载自: https://blog.csdn.net/m0_74073464/article/details/136288843
版权归原作者 青帝_ 所有, 如有侵权,请联系我们删除。

“武沛齐Django web学习 Django(一)”的评论:

还没有评论