zoukankan      html  css  js  c++  java
  • 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/")





  • 相关阅读:
    switch-case的用法
    关于string
    串的顺序存储和链式存储
    【APIO2009T1】采油区域-分类讨论+动态规划
    【APIO2009T1】采油区域-分类讨论+动态规划
    【BashuOJ2963】数字游戏-DFS+剪枝
    【BashuOJ2963】数字游戏-DFS+剪枝
    【POJ3177】Redundant Paths-边双连通分量+缩点
    【POJ3177】Redundant Paths-边双连通分量+缩点
    【POJ2942】Knights of the Round Table-点双连通分量+判断奇环
  • 原文地址:https://www.cnblogs.com/z360519549/p/7398734.html
Copyright © 2011-2022 走看看