一个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
。