django教程


一个django写了两天, 感觉在这方面还是有点菜.

环境配置

尽量还是用pycharm吧, 年少不知IDE好.

环境配置图

参照这样的界面即可.

否则的话参照这样的步骤, 但是也不太全, 还需要修改一些设置

pip3 install django
pip3 install django-taggit
django-admin startproject manager_system && cd manager_system
python3 manage.py startapp app

初始化的目录结构如下

app中定义了数据表还有页面动作等结构. manage_system中定义了路由表以及一些设置, templates中用来存放html页面.

├── app
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── manage.py
├── manage_system
│   ├── asgi.py
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-38.pyc
│   │   └── settings.cpython-38.pyc
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── templates

页面显示

要是你不需要数据库的话其实只需要修改urls.py添加路由功能以及在views.py中添加处理函数。
urls.py一般内容如下:

# urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('your_url', view.handler)
]

需要在里面定义你的url以及view.py中对应的处理函数。然后当你点击这个url的时候, 就会调用对应的函数处理请求。然后是views.py中的处理函数。

# views.py

def handler(request):
  if request.method == 'POST':
    return 'hellowword'
  
  return render(request, 'hello.html', {'param1', param1})

定义的处理函数需要一个接收一个request请求, 然后一般会有一个判断请求类型的分支, 一般来说,如果你直接通过url跳转或者访问,那就是一个GET请求,如果你通过表单进行提交,那么得到的就是一个POST请求,这两种请求需要不同的处理。最终生成HTML的方式也有两种,你可以直接返回一个字符串,他也会显示出来。或者的话你可以写一个HTML用来渲染。

{% extends 'base.html' %}
{% block content %}
    <h3>Students</h3>
    <table class="table table-hover">
        <tr>
            <th>ID</th>
            <th>Name</th>
        </tr>
        {% for stu in students %}
            <tr>
                <td>{{ stu.stu_id }}</td>
                <td>{{ stu.name }}</td>
            </tr>
        {% endfor %}
    </table>

    <h3>Employees</h3>
    <table class="table table-hover">
        <tr>
            <th>ID</th>
            <th>Name</th>
        </tr>
        {% for emp in employees %}
            <tr>
                <td>{{ emp.emp_id }}</td>
                <td>{{ emp.name }}</td>
            </tr>
        {% endfor %}
    </table>
    {% csrf_token %}
{% endblock %}

{% block import %}
{% endblock %}

比如在这个例子中, HTML还支持了Python的语法。你可以使用来表示render传来的参数param1, 还可以使用{% extend %}来继承模板。然后通过这些已经能显示基本的页面了。

数据库操作

如果你还需要数据库操作的话, 就要用到models.py中的类了。首先你需要把数据库的关系设计好,知道表结构以及表之间的关系,然后一张表对应models.py中的一个类。

# models.py

class Student(models.Model):
    stu_id = models.IntegerField(8, primary_key=True)
    name = models.CharField(max_length=32)

定义的类需要继承Model类,然后一个字段对应一个属性,属性的参数根据字段的参数进行设置。比如这里就对应着Student(stu_id primary key INT(8), name varchar(32))这张表。
定义好models.py中的类以后,然后再使用一下指令去创建数据表。默认用的是sqlite3,你也可以更改设置成别的数据库。

python3 manage.py makemigrations
python3 manage.py migrate

然后他就会给你创建出空的表了。

插入操作

models.StudentUsage.objects.create(stu_id_id=aid, start_datetime=t, end_datetime=0)

删除操作

models.Student.objects.filter(pk=int(user[0])).delete()

更新操作

obj = models.StudentUsage.objects.filter(stu_id=aid).first()
obj.end_datetime = time.time()
obj.save()

可以通过save操作,也可以用upate。

查找操作

models.StudentUsage.objects.filter(end_datetime=0)

通过filter过滤出所需的条件,或者使用all拿到所有的数据

多表查询

models.StudentUsage.objects.create(stu_id_id=aid, start_datetime=t, end_datetime=0)

多表查询的时候对应的外健要多加一个id。比如原本字段叫stu_id,那么在引用是就要变成stu_id_id


Author: 蒋璋
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source 蒋璋 !