Back

python - django 入门

发布时间: 2024-04-10 10:20:00

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

分页

登录授权等

Back