Django基础

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/")





posted @ 2017-08-20 15:49  zhoudingzhao  阅读(134)  评论(0编辑  收藏  举报