常用命令
# 1.创建django项目
django-admin startproject project_name
# 2.创建app,app目录下执行,git。
django-admin.exe startapp appname
django-admin.py startapp appname
python manage.py startapp appname
# 3.为模型的改变生成迁移文件。
python manage.py makemigrations
仅仅对指定app进行作用的话则执行如下命令:
python manage.py makemigrations appname
# 4.执行数据库迁移。
python manage.py migrate
仅仅对指定app进行作用的话则执行如下命令:
python manage.py migrate appname
# 5.创建超级管理员
python manage.py createsuperuser
目录结构
关系图
数据库的安装与创建
- 安装好mysql
- 进入Mysql安装目录下.\bin文件夹,net start mysql:启动mysql服务。
- mysql -u root -p,输入密码后进入控制台。
- create database dbname; 创建数据库。
django配置
settings.py设置
- 配置数据库。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'monitor_demo2',
'USER':'root',
'PASSWORD':'******',
'HOST':'localhost',
'PORT':'3306',
}
}
- INSTALLED_APPS中添加新建的app路径:告诉django本项目是由哪些应用程序组成。
- TEMPLATES中添加模板绝对路径(需先在project目录下创建模板文件夹templates)。此处为BASE_DIR/templates下。
'DIRS': [os.path.join(BASE_DIR, 'templates')]
4.添加静态文件路径(需先在project目录下创建静态文件夹static)。
STATICFILES_DIRS=(os.path.join(BASE_DIR, "static"),)
模型操作。
相应app下models.py文件中创建数据库表(代码如下),并生成迁移文件,执行数据库迁移。
class model_aprov(models.Model):
""" 模型审核表 """
id = models.AutoField(primary_key=True)
modelname = models.CharField(max_length=20, verbose_name='模型编号')
apply_dt = models.CharField(max_length=20, verbose_name='申请日期')
types = models.CharField(max_length=20, verbose_name='类别')
type_value = models.CharField(max_length=20, verbose_name='类别值')
loan_nums = models.IntegerField(verbose_name='模型审批量')
passrate = models.FloatField(verbose_name='模型通过率')
createDateTime = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ('-createDateTime',)
def __str__(self):
return self.modelname #默认使用modelname来显示主题信息
创建管理网站
- 创建管理员,设置用户名及密码。
- 向管理网站注册模型。app中admin.py添加类似以下代码:
from appName.models import model_aprov
admin.site.register(model_aprov)
- 启动项目。localhost:8000/admin/,输入账号和密码进入管理界面。
创建网页
URL的定义
- app目录下创建urls.py文件
url匹配模板。来自网页请求。
path('Js_aprov/<str:key>/',views.Aprov_results, name='Js_aprov')
path的三个参数。
第一个是与请求的url相匹配的正则表达式;
第二个是对应的视图函数,请求的url与第一个参数匹配时调用;
第三个参数定义该url模式名称,在代码其他需要用到本链接的地方使用该名称,而不编写url。
url匹配model。来自静态文件(.js)请求
path('v1/api/Aprov_results/', views.AprovResults_api)
均放入放入列表urlpatterns中
- 在项目主文件夹urls.py中include相应app的urls。
path('ins/', include('Ins_app1.urls'))```
#### 编写视图
视图函数接受请求的信息,生成网页需要的数据,并发送给浏览器。
##### 匹配模板
请求的url与我们定义的URL模式匹配时,django在view.py中查找Aprov_results()函数,再将请求对象传递给视图函数。
key为传递给模板的参数。
```python
def Aprov_results(request, key):
return render(request, 'js/aprov_results.html', {'product':key})
匹配model
该视图函数返回序列化后的model数据给静态文件(.js)。
from app.jsapp.models import model_aprov
from app.jsapp.serializers import ModelaprovSerializer
from rest_framework.decorators import api_view
from rest_framework.response import Response
from django.http import JsonResponse
from rest_framework import status
@api_view(['POST'])
def AprovResults_api(request):
if request.method == 'POST':
modelname = request.POST.get('model')
type_value = request.POST.get('type_value')
if modelname and type_value:
data = model_aprov.objects.filter(modelname=modelname,type_value=type_value).order_by('apply_dt')
if data:
serializer = ModelaprovSerializer(data, many=True)
return Response({'code': 0, 'data': serializer.data})
else:
return Response({'code': 1, 'data': []})
else:
return JsonResponse({'info': 'para is null'}, status=status.HTTP_400_BAD_REQUEST)
else:
return JsonResponse({'info': '请求方法错误,使用POST'}, status=status.HTTP_400_BAD_REQUEST)
创建序列化文件
app目录下创建serializers.py文件
序列化model数据
from rest_framework import serializers
from app.jsapp.models import model_aprov
class ModelaprovSerializer(serializers.ModelSerializer):
class Meta:
model = model_aprov
fields = ('apply_dt,'loan_nums','passrate')
完善静态文件static
css,js,fonts
完善模板模板templates
html
父模板
所有页面都包含的部分,如index。
子模板
继承父模板
错误及解决
数据库错误
现象
执行命令python manage.py runserver时报错:
Error loading MySQLdb module.Did you install mysqlclient?
原因
没有找到MySQLdb包,将pymysql当作MySQLdb来使用。
方法
settings.py同目录下的__init__.py中添加以下代码:
import pymysql
pymysql.install_as_MySQLdb()
其他ip访问失败
- settings.py中设置
ALLOWED_HOSTS = ['*']
,允许所有局域网ip访问。 - 仅允许指定ip访问,
ALLOWED_HOSTS = ['192.168.1.1','127.0.0.1']
- 使用
python manage.py runserver 0.0.0.0:8000
命令启动服务