1、安装 pip install django
2、创建工程 django-admin startproject mysite
3、创建app cd mysite ---- python manage.py startapp monitor , python manage.py startapp cmdb (一个project下可以有多个app)
4、执行django程序 python manage.py runserver 127.0.0.1:8001
5、生成表: python manage.py makemigrations (生成配置文件) ---- python manage.pymigrate (根据配置文件创建数据库)
6、创建用户: python manage.py createsuperuser 。 会在 auth_user 表中增加一条记录。
7、路由:
a. 一级路由分发:
在浏览器中访问时, 首先根据 URL 匹配 urls.py 路由。 比如访问 http://ip:port/news/12/34
urlpatterns = [
url(r'^news/(d+)/(d+)', views.news)
]
根据以上匹配规则, 请求路由到 views.py 中的以下函数处理:
def news(request, id,id2):
nid = int(id) + int(id2)
return HttpResponse(nid)
则页面上显示 46 。 在url() 中以 / 分隔参数, id 接收第一个参数 12 , id2 接收第二个参数 34 。
如果在 urls.py 中 指定参数的名字:
urlpatterns = [
url(r'^new/(?P<n1>d+)/(?P<n2>d+)', views.new)
]
在 views.py 中接收这两个参数, 则不按照顺序。def new(request,n2,n1):
return HttpResponse(n1+n2)
此时访问 http://127.0.0.1:8001/new/12/34 。 则 n1=12, n2=34 , 页面显示 1234 。
b. 二级路由分发:
一个project 下面有多个app 。 在 project 中的 urls.py 中配置一级路由:
from django.conf.urls import url,include
from django.contrib import admin
urlpatterns = [
url(r'^monitor/', include("monitor.urls")),
url(r'^cmdb/', include("cmdb.urls"))
]
当访问 monitor 时, 则由 monitor 下面的 urls 处理 。
monitor 中的 urls.py :
from django.conf.urls import url
from django.contrib import admin
from monitor import views
urlpatterns = [
url(r'^home/', views.home),
]
monitor 中的 views.py :
from django.shortcuts import render
from django.shortcuts import HttpResponse
# Create your views here.
def home(request):
return HttpResponse('monitor.home')
则访问 http://127.0.0.1:8001/monitor/home/ , 页面显示 monitor.home 。
类似的,访问 http://127.0.0.1:8001/cmdb/home/ , 可以路由到 cmdb 的 urls.py 和 views.py 处理。
二: Django对数据库处理:
1、 在monitor 的 models 中创建类:
class UserInfo(models.Model):
username = models.CharField(max_length=23)
password = models.CharField(max_length=30)
age = models.IntegerField()
执行 python manage.py makemigratoins --- python manage.py migrate 即可以在数据库中生成 monitor_Userinfo 表。
2、
在 views.py 中增加方法:
def db_handle(request):
user = {"username":"Dick", "password":"123", "age":73}
models.UserInfo.objects.create(**user)
页面访问 http://ip:port/monitor/db_handle 即在数据库表中增加了一个记录。 (在 urls.py 中需要增加 db_handle 路由)
models.UserInfo.objects.filter(username="alex").delete(); #删除Userinfo表中的 username="alex" 的记录。
models.UserInfo.objects.filter(username="Dick").update(age=20) #修改username="Dick" 的记录,把 age改成 20
models.UserInfo.objects.all().update(age=30) #修改所有
# 查询: 返回的是一个 queryset 的list :
userlist = models.UserInfo.objects.all()
userlist = models.UserInfo.objects.filter(age=30)
# 循环此列表, 取出username 。并显示在页面上:
user_name = ""
for i in userlist:
user_name += i.username + "<br>"
return HttpResponse(user_name)
3、在html模板中显示表中的数据:
a. 在 settings 的 TEMPLATES 设置 'DIRS': [os.path.join(BASE_DIR,'templates').replace('\', '/'),],
b. 在工程下建 templates 目录, 在此目录下建 t1.html 文件:
<body> <table border="1"> <thead> <tr> <th>username</th> <th>password</th> <th>age</th> </tr> </thead> <tbody> {% for item in li %} #jinja2 的语法: for 、 if 等 用 {% %} , 变量用 {{ var }} <tr> <td>{{ item.username }}</td> <td>{{ item.password }}</td> <td>{{ item.age }}</td> </tr> {% endfor %} </tbody> </table> </body>
c. 在views.py 中获取表中的数据:
userlist = models.UserInfo.objects.all()
return render(request, "t1.html",{"li":userlist}) # 把结果列表userlist赋值给 li ,并使用 li 中的值替换 t1.html 中的值。
d. 在html 中引入js 和 css
在工程下建 static 目录,把 js 和 css 文件放到 static 目录。在 settings.py 中加上 js 和 css 的目录:
STATICFILES_DIRS = (
os.path.join(BASE_DIR,'static'),
)
在 html 文件 t1.html 文件中即可引入 js 和 css:
<script src="/static/jquery-1.10.1.min.js"></script>
<link href="/static/css/my.css" rel="stylesheet" type="text/css" />
$("#myclock").html("<h1>现在是:"+hh+":"+mm+":"+ss+"<h1>");
e. 前台页面提交数据,保存到表中:
在 t1.html 中加上:
<form action="/monitor/db_handle/" method="post">
username:<input name="username"></input><br>
password:<input name="password"></input><br>
age: <input name="age"></input><br>
<input type="submit"></input>
</form>
在 views.py 中加上:
if request.method=="POST":
name=request.POST['username']
passwd=request.POST['password']
age = int(request.POST['age'])
models.UserInfo.objects.create(username=name, password=passwd, age=age)
页面跳转:
return redirect("/cmdb/home/")