python(建立一個school的簡單django專案以及相關配置、完成school專案的models模板與檢視views的編寫—index(首頁)、add(新增學生))

yytkkn發表於2021-01-04

學習目標:

python學習十九-django

建立一個新的student專案


學習內容:

1、建立一個school的簡單django專案以及相關配置
2、完成school專案的models模板與檢視views的編寫


1、建立專案以及相關配置

1、在cmd管理員介面中進入到存放專案的資料夾建立專案school
在這裡插入圖片描述
2、在Navicat中建立資料庫school
在這裡插入圖片描述

3、在pycharm中的setting中編寫程式碼連線資料庫

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'school',
        'USER': 'root',
        'PASSWORD': '1234',
        'HOST': '127.0.0.1',
    }
}

4、然後在pycharm的terminal中建立應用app1
在這裡插入圖片描述

5、在專案app1的檢視views中編寫index方法,編寫路由,然後用瀏覽器訪問到檢視index

  • 編寫index
from django.shortcuts import render
from django.http import HttpResponse


def index(request):
    return HttpResponse('hello world!!!')
  • 到專案的setting中的INSTALLED_APPS新增應用app1,方便定址
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app1',
]
  • 到應用app1中建立app1/urls.py檔案,編寫找到index的路由
from django.urls import path
from .views import *

urlpatterns = [
    path('', index, name='index')
]
  • 再到專案school的urls編寫路由,訪問時可以找到應用app1的urls
from django.contrib import admin
from django.urls import path,include 

urlpatterns = [    
path('app1/',include('app1.urls')),    
path('admin/', admin.site.urls),]
  • 訪問建立的檢視瀏覽器輸入http://127.0.0.1:8000/app1/

可以看見在檢視views中編寫的index返回的內容

在這裡插入圖片描述
6、在應用app1中的app1/models中編寫類,向資料庫mysql中提交生成表

from django.db import models


class Teacher(models.Model):
    tname = models.CharField(max_length=20)
    tage = models.IntegerField()
    tgender = models.CharField(max_length=2)
    
    def __str__(self):
    return self.tname


class Student(models.Model):
    sname = models.CharField(max_length=20)
    sage = models.IntegerField()
    sgender = models.CharField(max_length=2)
    s_t = models.ForeignKey(Teacher, on_delete=models.CASCADE)
    
    def __str__(self):
    return self.tname
  • 提交步驟:python manage.py runserver——》python manage.py makemigrations——》python manage.py migrate
  • 向表格中新增資料
    在這裡插入圖片描述
    在這裡插入圖片描述

2、完成models模板與檢視views的編寫

1、建立templates

  • 在school專案下建立templates資料夾,並完成相關配置
    在這裡插入圖片描述

2、編寫index首頁

  • 在app1/templates中建立index.html檔案

展示首頁樣式
在這裡插入圖片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<table border="1" bgcolor="#8fbc8f">
    <tr><td>學生姓名</td><td>學生年齡</td><td>學生性別</td><td>操作</td></tr>
    {%for i in student%}
    <tr><td>{{i.sname}}</td><td>{{i.sage}}</td><td>{{i.sgender}}</td><td><a href="#">修改</a>|<a href="#">刪除</a></td></tr>
    {% endfor %}
</table>
<a href="{% url 'add'%}">新增</a>
</body>
</html>

2、編寫add操作

在index頁面的下面有個add操作,在templates中新增add.html檔案,在子路由app1/urls.py中新增add路由,在檢視views新增add方法

  • 當在index頁面選擇add時
    在這裡插入圖片描述
  • 當新增成功時
    在這裡插入圖片描述
  • 在templates中新增add.html檔案
  • {% csrf_token %}(防止跨域訪問攻擊):在 HTTP 請求中以引數的形式加入一個隨機產生的 token,並在伺服器端建立一個攔截器來驗證這個token,如果請求中沒有 token 或者 token 內容不正確,則認為可能是CSRF攻擊而拒絕該請求
  • <div style="clear: both"></div>:清bai除同行元素,不允許其它元du素與之在一行內
  • 在建立返回摁鈕時用input新增button屬性:<input type="button" class="bt" value="返回">
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>新增學生</title>
    <style type="text/css">
        * {
            font-size: 12px;
            margin: 0;
            padding: 0;
        }
	input {
            width: 320px;
            height: 24px;
            border: 1px solid #999;
            border-radius: 4px;
        }
	
	.formErr {
            border: 1px solid #ff0000;
        }
	
	.form .label {
            display: block;
            float: left;
            width: 128px;
            height: 40px;
            line-height: 40px;
            text-align: end;
        }

	form .txt {
            display: block;
            float: left;
            width: 340px;
            height: 40px;
            line-height: 40px;
            padding-left: 16px;
        }

	bt {
            width: 56px;
            height: 24px;
            background-color: green;
            border: 0;
            border-radius: 4px;
            color: white;
        }

	.form .errTips {
            width: 226px;
            background-color: lightgreen;
            color: darkred;
            border-radius: 4px;
            margin-left: 144px;
            margin-top: 6px;
            margin-bottom: 4px;
            padding: 16px 48px;
        }
    </style>
</head>
<body>
<div class="form">
    <form action="" method="post">
        {% csrf_token %}
    <div>
        <span class="label">學生姓名</span>
        <span class="txt"><input type="text" placeholder="6-20個字元" name='sname'/></span>
    </div>
    <div style="clear: both"></div>
    <div>
        <span class="label">學生性別</span>
        <span class="txt">
            <select name="sgender">
                <option value="男"></option>
            <option value="女"></option></select>
        </span>
    </div>
        <div style="clear: both"></div>
        <div>
        <span class="label">教師選擇</span>
        <span class="txt">
            <select name="tid">
                {% for t in teacher %}
                  <option value="{{t.id}}">{{ t.tname }}</option>

                {% endfor %}

              </select>
        </span>
    </div>
    <div style="clear: both"></div>
    <div>
        <span class="label">學生年齡</span>
        <span class="txt"><input type="text" placeholder="請輸入年齡" name="sage"/></span>
    </div>
    <div style="clear: both"></div>

    {% if a %}
       <div class="errTips">
        <ul>
            <li>{{ a }}</li>
      </ul>
    </div>

    {% endif %}
    
<div style="clear: both"></div>
    <div>
        <span class="label"></span>
        <span class="txt"><input type="submit" class="bt" value="提交">  <a href="{% url 'index' %}" ><input type="button" class="bt" value="返回"></a></span>

    </div>
    <div style="clear: both"></div>
        </form>
</div>
</body>
</html>
  • 在app1/urls中新增路由
from django.urls import path
from .views import *

urlpatterns = [
    path('', index, name='index'),
    path('add', add, name='add'),
]
  • 在檢視app1/views中新增add方法
def add(request):
    a = ''
    teacher = Teacher.objects.all()
    if request.POST:
       a = Student.objects.create( sname=request.POST['sname'], sgender=request.POST['sgender'], sage = request.POST['sage'], s_t_id=request.POST['tid'])
       if a:
            a='新增成功'
    return render(request,'add.html',{'teacher':teacher,'a':a})

相關文章