发布于2019-08-23 10:19 阅读(1057) 评论(0) 点赞(1) 收藏(3)
pip3 install django
pip3 uninstall django
# django-admin startproject 创建的项目名
django-admin startproject mywebsite
# 运行时需要进入到django目录
python manage.py runserver
# python manage.py startapp 应用名称
python manage.py startapp news
# 在项目下的settings文件中进行注册
# 在INSTALLED_APPS中增加需要注册的应用名,如上news
# 在项目下的settings文件中进行设置
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'
python manage.py createsuperuser
主要封装数据库,对数据库进行访问,对数据进行增删改查。
进行业务逻辑处理
主要进行展示
protocol://hostname[:port]/path/[:parameters][?query]#fragment
path(<route>, <view>, [name=None], [**kwargs])
path('AlexLu/Eva/<html>', views.web, name='web'),
# 其中<html>为传递给函数views.web的参数
<str:html>
匹配一个非空字符及,除去 ’/‘ ,默认使用的是这种方式<int:html>
匹配0或正整数<slug:html>
由ASCII字母或数字组成,通过 ’-‘ 链接的字符串<uuid:html>
uuid格式的字符串<path:html>
匹配一个非空字符串,包括 ’/‘path('index/<str:html>', views.index, name='index'),
path('index/<path:home>', views.home, name='home'),
path('page/<int:page>', views.page, name='page'),
path('index/<int:numa>/<int:numb>', views.sum, name='sum'),
path('slug/<slug:slugstr>', views.slugstr, name='slugstr'),
path('uuid/<uuid:uuid>', views.uuid, name='uuid'),
# ---------------------------------------------------------------------
def index(request, html):
return HttpResponse(html)
def home(request, home):
return HttpResponse('<h1>{}</h1>'.format(home))
def page(request, page):
return HttpResponse('<h1>{}</h1>'.format(page))
def sum(request, numa, numb):
return HttpResponse('<h1>{}</h1>'.format(numa+numb))
def slugstr(request, slugstr):
return HttpResponse('<h1>{}</h1>'.format(slugstr))
def uuid(request, uuid):
return HttpResponse('<h1 >{}</h1>'.format(uuid))
redirect(to, permanent=False, *args, **kwargs)
reverse(viewname, urlconf=None, args=None, kwargs=None, current_app=None)
HttpResponse(content, content_type=None, status=None, charset=None, reason=None *args, **kwargs)
require_http_methods([Mthods_list])
标准语法:
render(<request>, <template_name>, context=None, content_type=None, status=None, using=None)
必选参数
可选参数
# 检查是否安装mysql
ps -aux | grep 'mysql'
# 安装服务端
sudo apt-get install mysql-server
# 安装客户端
sudo apt-get install mysql-client
# 启动服务
sudo service mysql start
# 停止服务
sudo service mysql stop
# 重启服务
sudo service mysql restart
# 进入数据库
sudo mysql -uroot -p
# 进入管理员模式
alexlu@alexlu-Ubuntu:~$ sudo su
# 进入MySQL
root@alexlu-Ubuntu:/home/alexlu# mysql
# 查看用户权限
mysql> select user,plugin from mysql.user;
# 更新root用户密码(此处密码设为‘root’)
mysql> update mysql.user set authentication_string=PASSWORD('root'),plugin='mysql_native_password';
# 刷新设置
mysql> flush privileges;
# 退出MySQL与root用户
mysql> exit;
root@alexlu-Ubuntu:/home/alexlu# exit
# 重启数据库服务
alexlu@alexlu-Ubuntu:~$ sudo service mysql restart
# 尝试重新登陆(前面不加sudo)
alexlu@alexlu-Ubuntu:~$ mysql -uroot -proot
# 展示当前数据库:
mysql> show databases;
# 创建数据库(django为数据库名称)-此处未设置中文编码
mysql> create database django;
# 查看创建的数据库
mysql> show create database django;
# 删除数据库
mysql> drop database django;
# 创建支持中文编码的数据库
mysql> create database django charset='utf8';
# 查看当前使用的数据库
mysql> select database();
# 选择使用的数据库
mysql> use django_AlexLu;
# 创建表
mysql> create table students(
-> id int primary key auto_increment not null,
-> name varchar(20),
-> age int default 20
-> );
# 显示创建的表
mysql> show create table students;
# 显示表结构
mysql> desc students;
# 显示已创建的表
mysql> show tables;
# 向表中插入数据
mysql> insert into students(name,age) values('Tom', 22);
# 查询表中的数据
mysql> select * from students;
# 在django的settings.py文件中对DATABASES进行设置
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django_AlexLu',
'USER': 'root',
'PASSWORD': 'root',
'HOST': 'localhost',
'PORT': 3306
}
}
pip install pymysql
# 在django项目下的__init__.py中进行设置
import pymysql
pymysql.install_as_MySQLdb()
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.
# 安装libmysqlclient-dev
sudo apt-get install libmysqlclient-dev
# 安装mysqlclient
pip install mysqlclient
# 修改django项目下的__init__.py(去掉上面第3步增加的两行内容)改为:
import MySQLdb
# Ubuntu
sudo apt-get install libmysqlclient-dev
# CentOS
yum install python-devel mysql-devel
# 生成迁移文件
python manage.py makemigrations
# 将迁移文件映射到数据库中
python manage.py migrate
# 如需强制迁移需要在上方命令后面加上 应用名
# 在app下的admin.py中进行设置
from django.contrib import admin
from .models import Articles
admin.site.register(Articles)
# 在app文件下的admin.py中进行设置
from django.contrib import admin
from .models import Articles
class AritclesAdmin(admin.ModelAdmin):
list_display = ['id', 'title', 'content', 'author']
admin.site.register(Articles, AritclesAdmin)
# 修改app下的模型文件models.py,在字段创建时设置中文名称
class Articles(models.Model):
title = models.CharField('标题', max_length=20)
author = models.CharField('作者', max_length=20)
content = models.TextField('内容')
class Students(models.Model):
choices = [
('male', '男'),
('female', '女')
]
name = models.CharField(verbose_name='姓名', max_length=20, unique=True)
age = models.CharField(verbose_name='年龄', max_length=10)
gender = models.CharField(verbose_name='性别', max_length=10, choices=choices, default='male')
is_deleted = models.BooleanField(default=False)
introduce = models.TextField(verbose_name='自我介绍')
# 在app下的模型文件models.py中进行设置
class Articles(models.Model):
title = models.CharField('标题', max_length=20)
author = models.CharField('作者', max_length=20)
content = models.TextField('内容')
def __str__(self):
return self.title
class Meta:
verbose_name_plural = '新闻列表'
verbose_name = '新闻'
# 在模型定义下的Meta子类中增加ordering字段进行设置
class Meta:
verbose_name_plural = '用户列表'
verbose_name = '用户'
ordering = ['age', '-name']
# ordering = ['-id']
# 同样是在Mate子类中增加db_table字段进行设置
class Meta:
verbose_name_plural = '用户列表'
verbose_name = '用户'
ordering = ['age', '-name']
db_table = 'students'
# 在视图views定义中,通过context传递给需要渲染的html
from django.shortcuts import render
from .models import Students
# Create your views here.
def index(request):
student_list = Students.objects.all() # 此处为获取表中所有数据
context = {
'students': student_list
}
return render(request, 'index.html', context)
# 在模板templates下的index.html中进行展示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% for student in students %}
<h1>{{ student.name }}——{{ student.age }}</h1>
{% endfor %}
</body>
</html>
# 在视图views定义中,通过context传递给需要渲染的html
from django.shortcuts import render
from .models import Magnate
# Create your views here.
def index(request):
context = {
'result': Magnate.objects.get(pk=1) # 此处查询的值必须是唯一的
}
return render(request, 'index.html', context)
# 在模板templates下的index.html中进行展示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>{{ result.name }}</h1>
<h1>{{ result.age }}</h1>
<h1>{{ result.gender }}</h1>
<h1>{{ result.assets }}</h1>
<h1>{{ result.company }}</h1>
</body>
</html>
# 在视图views定义中,通过context传递给需要渲染的html
from django.shortcuts import render
from .models import Magnate
# Create your views here.
def index(request):
context = {
'female_list': Magnate.objects.filter(gender='female')
# 'male_list': Magnate.objects.exclude(gender='female')
}
return render(request, 'index.html', context)
# 在模板templates下的index.html中进行展示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% for female in female_list %}
<h1>{{ female.name }}——{{ female.assets }}</h1>
{% endfor %}
</body>
</html>
# 在视图views定义中,通过context传递给需要渲染的html
from django.shortcuts import render
from .models import Magnate
# Create your views here.
def index(request):
magnates = Magnate.objects.all().filter(gender='male').filter(assets=2125)
context = {
'male_list': magnates
}
return render(request, 'index.html', context)
# 在模板templates下的index.html中进行展示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% for male in male_list %}
<h1>{{ male.name }}——{{ male.assets }}</h1>
{% endfor %}
</body>
</html>
# 在视图views定义中,通过context传递给需要渲染的html
from django.shortcuts import render
from .models import Magnate
# Create your views here.
def index(request):
magnates = Magnate.objects.filter(gender='male').order_by('-age')
context = {
'magnates': magnates
}
return render(request, 'index.html', context)
# 在模板templates下的index.html中进行展示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% for magnate in magnates %}
<h1>{{ magnate.name }}——{{ magnate.gender }}——{{ magnate.age }}</h1>
{% endfor %}
</body>
</html>
# 在视图views定义中,通过context传递给需要渲染的html
from django.shortcuts import render
from .models import Magnate
# Create your views here.
def index(request):
magnates = Magnate.objects.values('name', 'assets')
context = {
'magnates': magnates
}
return render(request, 'index.html', context)
# 在模板templates下的index.html中进行展示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% for magnate in magnates %}
<h1>{{ magnate.name }}——{{ magnate.gender }}——{{ magnate.age }}</h1>
{% endfor %}
</body>
</html>
# views视图中filter括号中使用模糊匹配的字段即可
magnates = Magnate.objects.filter(company__startswith='阿里')
# views视图中filter括号中使用 字段名__in 即可
results = Magnate.objects.filter(age__in=[45, 58, 50])
# views视图中filter括号中使用范围查询的字段即可
results = Magnate.objects.filter(age__range=(20, 45))
# views视图中filter括号中使用条件判断的字段即可
results = Magnate.objects.filter(assets__gt=1000)
# 在视图views定义中,通过create设置需要插入的数据
Magnate.objects.create(name='AlexLu', age=50, gender='male', assets=666, company='创慧弘', introduce='CHH Co., Ltd.')
# 在视图views定义中,通过count进行统计
from django.shortcuts import render
from .models import Magnate
# Create your views here.
def index(request):
magnates = Magnate.objects.filter(gender='male').count()
context = {
'count': magnates
}
return render(request, 'index.html', context)
# 在模板templates下的index.html中进行展示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>{{ count }}</h1>
</body>
</html>
# 需要在视图中导入相关统计函数
from django.db.models import Count, Sum, Avg, Max, Min
# 在视图中统计时通过aggregate进行调用
results = Magnate.objects.aggregate(Count('name'), Sum('assets'), Avg('assets'), Max('assets'), Min('assets'))
{'name__count': 10, 'assets__sum': 14446, 'assets__avg': 1444.6, 'assets__max': 2387, 'assets__min': 400}
# 在应用下创建forms.py
from django import forms
class RegisterForms(forms.Form):
user_name = forms.CharField(min_length=8, max_length=20, label='用户名', initial='请输入您的手机号/密码')
password = forms.CharField(widget=forms.PasswordInput, min_length=8, max_length=16, label='密码', help_text='密码为8-16位数字字母组合')
repassword = forms.CharField(widget=forms.PasswordInput, min_length=8, max_length=16, label='确认密码')
age = forms.IntegerField(min_value=18, max_value=100, label='年龄')
# age = forms.Field(widget=forms.NumberInput, label='年龄')
email = forms.EmailField(label='邮箱', disabled=True)
phone = forms.CharField(max_length=11, label='手机号码', label_suffix=':(+86)')
introduce = forms.CharField(label='自我介绍', widget=forms.Textarea)
# 在应用下的views.py中进行创建
from django.shortcuts import render
from .forms import RegisterForms
from django.views import View
class IndexForms(View):
def get(self, request):
forms = RegisterForms()
return render(request, 'index.html', {'forms': forms})
# 在应用下的urls.py中进行配置
urlpatterns = [
path('', views.IndexForms.as_view(), name='form'),
]
{# 在应用下templates中创建index.html进行编写 #}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="" method="post">
<table>
{{ forms.as_table }} {#渲染成表格#}
<tr>
<td><input type="submit" value="确认登陆" name="submit"></td>
</tr>
</table>
</form>
<hr>
<form action="" method="post">
<div>
{{ forms.as_p }} {#渲染成段落#}
<td><input type="submit" value="确认登陆" name="submit"></td>
</div>
</form>
<hr>
<form action="" method="post">
<div>
{{ forms.as_ul }} {#渲染成标签#}
<td><input type="submit" value="确认登陆" name="submit"></td>
</div>
</form>
</body>
</html>
{# 直接在index.html文件中增加样式 #}
{# 在<head>标签中增加<style>标签设置相应控件的样式 #}
<style>
#id_username{
border-radius: 5px;
}
</style>
# 在表单文件forms.py中为控件绑定样式类
from django import forms
class RegisterForms(forms.Form):
username = forms.CharField(min_length=8, max_length=20, label='用户名', initial='请输入您的手机号/密码', widget=forms.TextInput(attrs={'class': 'custom-forms'}))
password = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'custom-forms'}), min_length=8, max_length=16, label='密码', help_text='密码为8-16位数字字母组合')
repassword = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'custom-forms'}), min_length=8, max_length=16, label='确认密码')
age = forms.IntegerField(min_value=18, max_value=100, label='年龄', widget=forms.TextInput(attrs={'class': 'custom-forms'}))
# age = forms.Field(widget=forms.NumberInput, label='年龄')
email = forms.EmailField(label='邮箱', disabled=True, widget=forms.TextInput(attrs={'class': 'custom-forms'}))
phone = forms.CharField(max_length=11, label='手机号码', label_suffix=':(+86)', widget=forms.TextInput(attrs={'class': 'custom-forms'}))
introduce = forms.CharField(label='自我介绍', widget=forms.Textarea(attrs={'class': 'custom-forms-textarea'}))
{# 在<head>标签中增加<style>标签设置控件对应样式类的属性 #}
<style>
.custom-forms{
border-radius: 5px;
}
.custom-forms-textarea{
border-radius: 15px;
}
</style>
# 直接在表单文件form.py中定义控件时设置
from django import forms
class RegisterForms(forms.Form):
choices_item = [
(1, '男'), (2, '女'), (3, '保密')
]
# 下拉列表
gender = forms.ChoiceField(label='性别', choices=choices_item, nitial=3)
# 单选
gender2 = forms.ChoiceField(label='性别', choices=choices_item, widget=forms.RadioSelect, initial=2)
# 复选
gender3 = forms.MultipleChoiceField(label='性别', choices=choices_item, widget=forms.CheckboxSelectMultiple, initial=1)
from django import forms
class RegisterForms(forms.Form):
formats = [
'%Y-%m-%d', # '2019-6-30'
'%m/%d/%Y', # '06/30/2019'
'%m/%d/%y', # '06/30/19'
]
# 日期输入框
birthday = forms.DateField(label='出生日期', input_formats=formats)
year_list = [
1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
]
# 日期选择框
birthday2 = forms.DateField(label='出生日期', input_formats=formats, widget=forms.SelectDateWidget(years=year_list))
# 在应用下的views.py中的控件类视图中通过forms.is_valid()进行验证
from django.shortcuts import render, HttpResponse
from .forms import RegisterForms
from django.views import View
class IndexForms(View):
def get(self, request):
forms = RegisterForms()
return render(request, 'index.html', {'forms': forms})
def post(self, request):
forms = RegisterForms(request.POST)
if forms.is_valid():
birthday = forms.cleaned_data.get('birthday')
return render(request, 'home.html', {'birthday': birthday})
else:
return HttpResponse('<h1>对不起,您输入的出生日期有误~!</h1>')
{# 可通过home.html获取数据并展示 #}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>欢迎登陆Django后台管理系统</title>
</head>
<body>
<h1>{{ birthday }}</h1>
</body>
</html>
# django项目的应用下的forms.py
from django import forms
class RegisterForms(forms.Form):
choices_item = [
(1, '男'), (2, '女'), (3, '保密')
]
hobbies = [
(1, '足球'), (2, '篮球'), (3, 'Python')
]
year_list = [
1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
]
username = forms.CharField(min_length=8, max_length=20, label='用户名', initial='请输入您的手机号/密码', widget=forms.TextInput(attrs={'class': 'custom-forms'}))
password = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'custom-forms'}), min_length=8, max_length=16, label='密码', help_text='密码为8-16位数字字母组合')
repassword = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'custom-forms'}), min_length=8, max_length=16, label='确认密码')
gender = forms.ChoiceField(label='性别', choices=choices_item, nitial=3)
age = forms.IntegerField(min_value=18, max_value=100, label='年龄', widget=forms.NumberInput(attrs={'class': 'custom-forms'}))
birthday = forms.DateField(required=False, label='出生日期', widget=forms.SelectDateWidget(years=year_list))
hobby = forms.MultipleChoiceField(label='爱好', choices=hobbies, widget=forms.CheckboxSelectMultiple)
introduce = forms.CharField(label='自我介绍', widget=forms.Textarea(attrs={'class': 'custom-forms-textarea'}))
# 应用下的视图文件views.py中编写表单对应的类视图
from django.shortcuts import render, HttpResponse
from .forms import RegisterForms
from django.views import View
class IndexForms(View):
def get(self, request):
forms = RegisterForms()
return render(request, 'index.html', {'forms': forms})
def post(self, request):
forms = RegisterForms(request.POST)
if forms.is_valid():
username = forms.cleaned_data.get('username')
password = forms.cleaned_data['password']
context = {
# 以字典形式处理表单数据
'datalist': {
'username': username,
'password': password,
'repassword': repassword,
'age': age,
'gender': gender,
'birthday': birthday,
'hobby': hobby,
'introduce': introduce,
},
# 以列表形式处理表单数据
'datalist2': [
username,
password,
repassword,
age,
gender,
birthday,
hobby,
introduce,
],
}
return render(request, 'home.html', context=context)
else:
return HttpResponse('<h1>对不起,您输入的信息有误~!</h1>')
{# 通过home.html接收表单数据并展示 #}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>欢迎登陆Django后台管理系统</title>
</head>
<body>
{#接收字典形式数据#}
{% for k, v in datalist.items %}
<h1>{{ k }}---{{ v }}</h1>
{% endfor %}
<hr>
{#接收列表形式数据#}
{% for field in datalist2 %}
<h1>{{ field }}</h1>
{% endfor %}
</body>
</html>
from django.db import models
class Magnate(models.Model):
choices = [
('male', '男'),
('female', '女')
]
name = models.CharField(verbose_name='姓名', max_length=20, unique=True)
age = models.CharField(verbose_name='年龄', max_length=10)
gender = models.CharField(verbose_name='性别', max_length=10, choices=choices, default='male')
assets = models.IntegerField(verbose_name='资产')
company = models.CharField(verbose_name='公司', max_length=50)
is_deleted = models.BooleanField(default=False)
introduce = models.TextField(verbose_name='介绍')
class Meta:
verbose_name_plural = '富豪榜'
verbose_name = '富豪'
ordering = ['id']
# 在应用下的forms.py中进行建立
from django import forms
from .models import Magnate
class MagnatesForms(forms.ModelForm):
class Meta:
model = Magnate
# 获取全部字段
# fields = '__all__'
# 指定过滤掉字段‘isdeleted’
# exclude = ['is_deleted']
# 指定获取的字段列表
fields = ['name', 'age', 'assets', 'company']
# 在应用下的views.py中进行创建
from django.shortcuts import render, HttpResponse
from .models import Magnate
from .forms import MagnatesForms
from django.views import View
class IndexMagnate(View):
def get(self, request):
forms = MagnatesForms()
return render(request, 'index.html', {'forms': forms})
{# 在应用中templates下的index.html进行展示 #}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.custom-forms{
border-radius: 5px;
}
.custom-forms-textarea{
border-radius: 15px;
}
</style>
</head>
<body>
<form action="" method="post">
<div>
{{ forms.as_p }} {#渲染成段落#}
<td><input type="submit" value="确认登陆" name="submit"></td>
</div>
</form>
</body>
</html>
# 在项目的路由文件urls.py中通过include关联到应用路由
from django.contrib import admin
from django.urls import path, include
from news import urls as news_urls
urlpatterns = [
path('admin/', admin.site.urls),
path('', include(news_urls)),
]
# 在应用下的路由文件urls.py中将创建的模型表单视图与路径进行匹配
from django.urls import path
from news import views
urlpatterns = [
path('', views.IndexMagnate.as_view(), name='magnate'),
]
# 直接在forms.py中的模型表单定义中增加
# 此处增加了password与repassword两个字段
from django import forms
from .models import Magnate
class MagnatesForms(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'custom-forms'}), min_length=8, max_length=16, label='密码', help_text='密码为8-16位数字字母组合')
repassword = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'custom-forms'}), min_length=8, max_length=16, label='确认密码')
class Meta:
model = Magnate
# 获取全部字段
# fields = '__all__'
# 指定过滤掉字段‘isdeleted’
# exclude = ['is_deleted']
# 指定获取的字段列表————可用来调整显示顺序
fields = ['name', 'gender', 'age', 'password', 'repassword', 'assets', 'company']
# 直接在forms.py中的模型表单定义下增加widgets通过字典为相应的字段绑定控件及CSS样式
from django import forms
from .models import Magnate
class MagnatesForms(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'custom-forms'}), min_length=8, max_length=16, label='密码', help_text='密码为8-16位数字字母组合')
repassword = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'custom-forms'}), min_length=8, max_length=16, label='确认密码')
class Meta:
model = Magnate
# 获取全部字段
# fields = '__all__'
# 指定过滤掉字段‘isdeleted’
# exclude = ['is_deleted']
# 指定获取的字段列表————可用来调整显示顺序
fields = ['name', 'gender', 'age', 'password', 'repassword', 'assets', 'company']
widgets = {
'name': forms.TextInput(attrs={'class': 'custom-textinput'}),
'introduce': forms.Textarea(attrs={'class': 'custom-textinput', 'row': 30, 'cols': 80}),
}
{# 在html中为控件设定CSS样式 #}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.custom-forms{
border-radius: 5px;
}
.custom-forms-textarea{
border-radius: 15px;
}
.custom-textinput{
border: 5px solid #00ff00;
border-radius: 5px;
}
</style>
</head>
<body>
<form action="" method="post">
<div>
{{ forms.as_p }} {#渲染成段落#}
<td><input type="submit" value="确认登陆" name="submit"></td>
</div>
</form>
</body>
</html>
# 利用前端知识在html中直接进行样式设置
<form action="" method="post">
<hr>
<ul>
<li style="list-style-type: none;">
<span style="color: #ff0000">
{{ forms.username.label }} :
</span>
<span>
{{ forms.username }}
</span>
<span style="margin-left: 10px">
{{ forms.username.help_text }}
</span>
</li>
</ul>
<hr>
<td><input type="submit" value="确认登陆" name="submit"></td>
</form>
# 直接在模型表单定义中增加前端需要界面展示的信息,并在html中进行渲染
from django import forms
from .models import Magnate
class MagnatesForms(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'custom-forms'}), min_length=8, max_length=16, label='密码', help_text='密码为8-16位数字字母组合')
repassword = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'custom-forms'}), min_length=8, max_length=16, label='确认密码')
class Meta:
model = Magnate
# 获取全部字段
# fields = '__all__'
# 指定过滤掉字段‘isdeleted’
# exclude = ['is_deleted']
# 指定获取的字段列表————可用来调整显示顺序
fields = ['name', 'gender', 'age', 'password', 'repassword', 'assets', 'company']
widgets = {
'name': forms.TextInput(attrs={'class': 'custom-textinput'}),
'introduce': forms.Textarea(attrs={'class': 'custom-textinput', 'row': 30, 'cols': 80}),
}
help_texts = {
'name': '请输入中文姓名全称',
}
labels = {
'name': '中文姓名',
}
# 连接好MySQL数据库,在模型表单视图中post方法内进行数据获取和保存
from django.shortcuts import render, HttpResponse
from .models import Magnate
from .forms import MagnatesForms
from django.views import View
class IndexMagnate(View):
def get(self, request):
forms = MagnatesForms()
return render(request, 'index.html', {'forms': forms})
def post(self, request):
forms = MagnatesForms(request.POST)
if forms.is_valid():
forms.save()
return HttpResponse('<h1>数据保存成功!</h1>')
else:
return HttpResponse('<h1>数据保存失败!</h1>')
以上学习笔记是根据视频教程 Python之Django企业开发实战 的思路进行初步整理,待内容完整后进行重新梳理。
最后感谢陈老师详细的教学视频。
作者:皇后娘娘别惹我
链接:https://www.pythonheidong.com/blog/article/54203/94d09580bc9f0eeb1f8d/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!
列表(0)
装饰器(0)
python(1)
python学习教程(0)
类(0)
pandas(0)
文件操作(0)
python小游戏源码下载(17)
web表白小程序(8)
多线程(0)
爬虫(0)
python表白小程序(2)
装饰器(0)
python(1)
面试题(2)
python学习教程(0)
类(0)
pandas(0)
文件操作(0)
python小游戏源码下载(17)
web表白小程序(8)
多线程(0)
爬虫(0)
python表白小程序(2)