Python学习22
python-创建school的简单django项目、完成school项目(index首页、add添加学生、dels删除学生、updates修改学生信息)、创建static存放各类文件
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><td>操作</td></tr>
{%for i in student%}
<tr><td>{{i.sname}}</td><td>{{i.sage}}</td><td>{{i.sgender}}</td><td>{{i.s_t.tname}}</td><td><a href="{%url 'dels' i.id%}">删除</a> <a href="{% url 'updates' i.id%}">修改</a></td></tr>
{% endfor %}
</table>
<a href="{% url 'add' %}"><input type="button" value="添加"></a>
</body>
</html>
2、编写add操作
在index页面的下面有个add操作,在templates中添加add.html文件,在子路由app1/urls.py中添加add路由,在视图views添加add方法,在index页面中写入添加操作
- 当在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="{%url 'add'%}" 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