python - django 入门
访问量: 45
refer to:
https://www.w3schools.com/django/django_create_project.php
10多年没写python web了。
安装:
python -m pip install Django==5.0.4
创建项目:
django-admin startproject pfsense_monitor_server
启动:
python manage.py runserver

访问

创建一个简单的页面(view)与路由(route)
假设这个新的app(model)叫做monitor
python manage.py startapp monitors 这个命令就会创建对应的文件夹
修改view文件:monitors/views.py
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def monitors(request):
return HttpResponse("hihihi")
创建对应的router:
from django.urls import path
from . import views
urlpatterns = [
path('monitors/', views.monitors, name='monitors'),
]
修改对应的root目录下的router: (url.py )
pfsense_monitor_server/urls.py
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('monitors.urls'))
]
重启项目,访问 localhost:8000/monitors

使用view template
修改 monitors/views.py
from django.http import HttpResponse
from django.template import loader
def monitors(request):
template = loader.get_template('hi.html')
return HttpResponse(template.render())
创建 monitors/templates/hi.html
<!DOCTYPE html> <html> <body> <h1>hihihi !</h1> <p>Welcome to my first Django project!</p> </body> </html>
在 pfsense_monitor_server/settings.py 文件中,增加:
@@ -37,6 +37,7 @@ INSTALLED_APPS = [
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
+ 'monitors'
]
运行migrate:
python manage.py migrate
运行server python manage.py runserver , 访问, 可以看到效果

创建model
新增文件:app_name/monitors/models.py
from django.db import models
class Monitor(models.Model):
cpu_and_memory = models.CharField(max_length = 128*1024, help_text="cpu and memory information")
disk = models.CharField(max_length=128*1024, help_text = "disk information")
version = models.CharField(max_length=256, help_text = "pfsense version")
该model文件创建好之后,生成migration,并且执行:
python manage.py makemigrations monitors
Migrations for 'monitors':
monitors/migrations/0001_initial.py
- Create model Monitor
$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, monitors, sessions
Running migrations:
Applying monitors.0001_initial... OK
然后进入到console ( shell ) 中测试: 下面的用法跟active record 非常雷同
python manage.py shell
Python 3.8.3 (default, Feb 19 2023, 11:51:42)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from monitors.models import Monitor
>>> Monitor.objects.all()
>>> a = Monitor(cpu_and_memory="cpu 100%, memory: 56%", disk="30%")
>>> a.save()
>>> a
>>> Monitor.objects.all()
]>
>>> Monitor.objects.all().values()
>>> b = Monitor(cpu_and_memory="cpu 90%, memory: 26%", disk="50%")
>>> b.save()
>>> b.cpu_and_memory
'cpu 90%, memory: 26%'
>>> b.delete()
(1, {'monitors.Monitor': 1})
>>> b
>>> Monitor.objects.all()
]>
>>> Monitor.objects.all().values()
>>> a = Monitor.objects.all().values()[0]
>>> a.disk
Traceback (most recent call last):
File "", line 1, in
AttributeError: 'dict' object has no attribute 'disk'
>>> a.disk()
Traceback (most recent call last):
File "", line 1, in
AttributeError: 'dict' object has no attribute 'disk'
>>> a
{'id': 1, 'cpu_and_memory': 'cpu 100%, memory: 56%', 'disk': '30%', 'version': ''}
>>> a = Monitor.objects.all()[0]
>>> a
>>> a.disk
'30%'
>>> a.disk='66%'
>>> a.save()
使用view ( controller )
修改 your_app/views.py 内容如下:
from django.http import HttpResponse
from django.template import loader
from .models import Monitor
def monitors(request):
monitors = Monitor.objects.all().values()
template = loader.get_template('index.html')
context = {
'monitors': monitors
}
return HttpResponse(template.render(context, request))
修改template:
<html>
<body>
<h1> List </h1>
<table> {% for x in monitors %} <tr>
<td> {{ x.id }}
</td> <td>
{{ x.cpu_and_memory }} </td>
<td> {{ x.disk }} </td> </tr>
{% endfor %} </table>
</body>
</html>
重新启动,就可以看到结果了:

剩余没做的:
表单提交
纯api
分页
登录授权等