网站建设方案书一定要交,中企动力做的网站价格区间,宣城seo,贵阳网站建设搜王道下拉简介
Django是一个主流的Python Web框架#xff0c;用于快速开发 Web 应用程序。功能强大#xff0c;Python Web应用开发的第一选择。
特点 ORM#xff08;对象关系映射#xff09;#xff1a; Django 提供了一个强大的 ORM#xff0c;允许开发者通过 Python 代码来定义…
简介
Django是一个主流的Python Web框架用于快速开发 Web 应用程序。功能强大Python Web应用开发的第一选择。
特点 ORM对象关系映射 Django 提供了一个强大的 ORM允许开发者通过 Python 代码来定义和操作数据库模型而无需直接使用 SQL。这使得数据库操作更加抽象和易于管理。 MVC 架构 Django 遵循 MVC模型-视图-控制器的软件设计模式但它使用了稍微不同的术语。在 Django 中模型Model表示数据结构视图View负责呈现用户界面而控制器Controller的职责被称为视图View。 模板引擎 Django 使用模板引擎来生成 HTML这使得前端和后端的代码分离更加容易。Django 的模板语言允许开发者在模板中嵌入动态内容。 自动化 admin 界面 Django 自动生成管理后台使得管理和操作数据库的过程变得非常简单。开发者可以轻松地创建、修改和删除数据库记录而无需编写自定义的管理界面。 表单处理 Django 提供了强大的表单处理工具使得用户输入的验证和处理变得更加简单。这对于开发 Web 表单和处理用户提交的数据非常有用。 安全性 Django 内置了一些安全性功能例如防止常见的 Web 攻击如 CSRF 攻击并提供了方便的用户身份验证和授权系统。 可扩展性 Django 的组件是松耦合的允许开发者使用现有的组件或编写自己的应用程序来扩展框架功能。 社区支持 Django 拥有庞大的社区支持提供了大量的文档、教程和第三方包使得学习和使用 Django 变得更加容易。
MVC 与 MTV模型
MVC 模型
MVC 模式Model–view–controller是软件工程中的一种软件架构模式把软件系统分为三个基本部分模型Model、视图View和控制器Controller。
MVC 以一种插件式的、松耦合的方式连接在一起。
模型M- 编写程序应有的功能负责业务对象与数据库的映射(ORM)。视图V- 图形界面负责与用户的交互(页面)。控制器C- 负责转发请求对请求进行处理。
简易图 用户操作流程图 MTV 模型
Django 的 MTV 模式本质上和 MVC 是一样的也是为了各组件间保持松耦合关系只是定义上有些许不同Django 的 MTV 分别是指
M 表示模型Model编写程序应有的功能负责业务对象与数据库的映射(ORM)。T 表示模板 (Template)负责如何把页面(html)展示给用户。V 表示视图View负责业务逻辑并在适当时候调用 Model和 Template。
除了以上三层之外还需要一个 URL 分发器它的作用是将一个个 URL 的页面请求分发给不同的 View 处理View 再调用相应的 Model 和 TemplateMTV 的响应模式如下所示
简易图 用户操作流程图 解析
用户通过浏览器向我们的服务器发起一个请求(request)这个请求会去访问视图函数
a.如果不涉及到数据调用那么这个时候视图函数直接返回一个模板也就是一个网页给用户。b.如果涉及到数据调用那么视图函数调用模型模型去数据库查找数据然后逐级返回。
视图函数把返回的数据填充到模板中空格最后返回网页给用户。 安装Django
本教程使用的是Python3.11Django5.0。
使用Django需要安装Python环境如果你还没有安装 Python请先从 Python 官网Download Python | Python.org下载并安装最新版本的 Python。
如果你还不懂Python去这里学习Python基础Python从入门到精通
安装django非常容易一行代码搞定
pip install django -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
验证一下是否安装成功看到版本号表示ok
python -m django --version
好的我们已经安装好了Django接下来我们正式进行Django开发。
创建一个Django项目
django-admin startproject mysite
执行后会生成如下项目结构
mysite
|-- mysite
| |-- __init__.py
| |-- asgi.py
| |-- settings.py
| |-- urls.py
| -- wsgi.py
-- manage.py
mysite: 项目的容器。manage.py: 一个实用的命令行工具可让你以各种方式与该 Django 项目进行交互。mysite/__init__.py: 一个空文件告诉 Python 该目录是一个 Python 包。mysite/asgi.py: 一个 ASGI 兼容的 Web 服务器的入口以便运行你的项目。mysite/settings.py: 该 Django 项目的设置/配置。mysite/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站目录。mysite/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口以便运行你的项目。
接着我们进入 mysite 目录输入以下命令启动服务器
python manage.py runserver 注意默认端口为8000你也可以指定你的ip和端口例如python manage.py runserver ip port 好了现在你已经启动了django项目在浏览器访问 127.0.0.1:8000 就会看到django的默认页面。
接下来我们开发一个用户管理案例结合MySQLBootstrapjQuery完成用户的增删改查。
django5.0需要安装MySQL8.0请确保你已经安装了MySQL8.0
用户管理案例
基于mysite项目创建app
1.创建应用程序
python manage.py startapp ums
模板文件和静态文件进行分开管理便于维护。按照如下创建 确保你的目录命名一定是templates和static否则django容器加载不到。
2.数据库配置
在mysite/settings.py文件中配置你的MySQL连接信息
DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: ums,HOST: 127.0.0.1,PORT: 3306,USER: root,PASSWORD: 123456,}
}
3.下载mysqlclient
mysqlclient作为django与MySQL的桥梁负责数据的操作和持久化。通过mysqlclient来初始化表结构。
pip install mysqlclient
4.定义模型
在 ums/models.py 放入以下内容
class UserInfo(models.Model):username models.CharField(verbose_name用户名, max_length32)password models.CharField(verbose_name密码, max_length64)age models.IntegerField(verbose_name年龄)salary models.DecimalField(verbose_name工资, max_digits10, decimal_places2)gender_choices ((1, 男),(2, 女))gender models.SmallIntegerField(verbose_name性别, choicesgender_choices)create_time models.DateTimeField(verbose_name创建时间)数据库表初始化
$ python manage.py makemigrations$ python manage.py migrate
5、编写视图
在 ums/views.py 编写用户增删改查
def user_list(request): 查询用户列表 # 获取所有用户列表 [obj,obj,obj]queryset models.UserInfo.objects.all()return render(request, user_list.html, {queryset: queryset})def user_add(request): 添加用户 if request.method GET:context {gender_choices: models.UserInfo.gender_choices,dept_list: models.Department.objects.all()}return render(request, user_add.html, context)# 获取用户提交的数据user request.POST.get(username)pwd request.POST.get(pwd)age request.POST.get(age)salary request.POST.get(salary)ctime request.POST.get(ctime)gender request.POST.get(gd)dept request.POST.get(dp)# 添加到数据库中models.UserInfo.objects.create(usernameuser, passwordpwd, ageage,salarysalary, create_timectime,gendergender, dept_iddept)# 返回到用户列表页面return redirect(/user/list/)def user_delete(request, nid): 删除用户 models.UserInfo.objects.filter(idnid).delete()return redirect(/user/list/)def user_edit(request, nid): 编辑用户 row_object models.UserInfo.objects.filter(idnid).first()if request.method GET:# 根据ID去数据库获取要编辑的那一行数据对象form UserModelForm(instancerow_object)return render(request, user_edit.html, {form: form})form UserModelForm(datarequest.POST, instancerow_object)if form.is_valid():# 默认保存的是用户输入的所有数据如果想要再用户输入以外增加一点值# form.instance.字段名 值form.save()return redirect(/user/list/)return render(request, user_edit.html, {form: form})from django import formsclass UserModelForm(forms.ModelForm):username forms.CharField(min_length3, label用户名)class Meta:model models.UserInfofields [username, password, age, salary, create_time, gender, dept]def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)# 循环找到所有的插件添加了classform-controlfor name, field in self.fields.items():field.widget.attrs {class: form-control, placeholder: field.label}
6、编写模板
templates下编写模板 user_list.html {% extends layout.html %}{% block content %}div classcontainerdiv stylemargin-bottom: 10pxa classbtn btn-success href/user/add/span classglyphicon glyphicon-plus-sign aria-hiddentrue/span新建用户/a/divdiv classpanel panel-default!-- Default panel contents --div classpanel-headingspan classglyphicon glyphicon-th-list aria-hiddentrue/span用户列表/div!-- Table --table classtable table-borderedtheadtrthID/thth用户名/thth密码/thth年龄/thth工资/thth创建时间/thth性别/thth所属部门/thth操作/th/tr/theadtbody{% for obj in queryset %}trth{{ obj.id }}/thtd{{ obj.name }}/tdtd{{ obj.password }}/tdtd{{ obj.age }}/tdtd{{ obj.salary}}/tdtd{{ obj.create_time|date:Y-m-d }}/tdtd{{ obj.get_gender_display }}/tdtd{{ obj.dept.name}}/tdtda classbtn btn-primary btn-xs href/user/{{ obj.id }}/edit/编辑/aa classbtn btn-danger btn-xs href/user/{{ obj.id }}/delete/删除/a/td/tr{% endfor %}/tbody/table/div/div
{% endblock %} user_add.html {% extends layout.html %}{% block content %}div classcontainerdiv classpanel panel-defaultdiv classpanel-headingh3 classpanel-title 新建用户 /h3/divdiv classpanel-bodyform methodpost{% csrf_token %}div classform-grouplabel用户名/labelinput typetext classform-control placeholder姓名 nameusername //divdiv classform-grouplabel密码/labelinput typetext classform-control placeholder密码 namepwd//divdiv classform-grouplabel年龄/labelinput typetext classform-control placeholder年龄 nameage//divdiv classform-grouplabel余额/labelinput typetext classform-control placeholder工资 namesalary//divdiv classform-grouplabel创建时间/labelinput typetext classform-control placeholder创建时间 namectime//divdiv classform-grouplabel性别/labelselect classform-control namegd{% for item in gender_choices %}option value{{ item.0 }}{{ item.1 }}/option{% endfor %}/select/divdiv classform-grouplabel部门/labelselect classform-control namedp{% for item in dept_list %}option value{{ item.id }}{{ item.name}}/option{% endfor %}/select/divbutton typesubmit classbtn btn-primary提 交/button/form/div/div/div
{% endblock %} user_edit.html {% extends layout.html %}{% block content %}div classcontainerdiv classpanel panel-defaultdiv classpanel-headingh3 classpanel-title 编辑用户 /h3/divdiv classpanel-bodyform methodpost novalidate{% csrf_token %}{% for field in form %}div classform-grouplabel{{ field.label }}/label{{ field }}span stylecolor: red;{{ field.errors.0 }}/span/div{% endfor %}button typesubmit classbtn btn-primary提 交/button/form/div/div/div
{% endblock %} layout.html {% load static %}
!DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/titlelink relstylesheet href{% static plugins/bootstrap-3.4.1/css/bootstrap.min.css %}style.navbar {border-radius: 0;}/style
/head
body
nav classnavbar navbar-defaultdiv classcontainerdiv classnavbar-headerbutton typebutton classnavbar-toggle collapsed data-togglecollapsedata-target#bs-example-navbar-collapse-1 aria-expandedfalsespan classsr-onlyToggle navigation/spanspan classicon-bar/spanspan classicon-bar/spanspan classicon-bar/span/buttona classnavbar-brand href# 用户管理系统 /a/divdiv classcollapse navbar-collapse idbs-example-navbar-collapse-1ul classnav navbar-navlia href/user/list/用户管理/a/lilia href#Link/a/li/ulul classnav navbar-nav navbar-rightlia href#登录/a/lili classdropdowna href# classdropdown-toggle data-toggledropdown rolebutton aria-haspopuptruearia-expandedfalseJohnnyspan classcaret/span/aul classdropdown-menulia href#个人资料/a/lilia href#我的信息/a/lili roleseparator classdivider/lilia href#注销/a/li/ul/li/ul/div/div
/navdiv{% block content %}{% endblock %}
/divscript src{% static js/jquery-3.6.0.min.js %}/script
script src{% static plugins/bootstrap-3.4.1/js/bootstrap.min.js %}/script
/body
/html
7、配置路由
在 mysite/urls.py 配置路由
from django.contrib import admin
from django.urls import path
from app01 import viewsurlpatterns [# 用户管理path(user/list/, views.user_list),path(user/add/, views.user_add),path(user/int:nid/edit/, views.user_edit),path(user/int:nid/delete/, views.user_delete),
]
最后启动程序恭喜您完成
python manage.py runserver