1.虚拟环境+django环境(若存在用之前的)
创建一个虚拟环境 (会新建一个文件,里面有 Scripts/python.exe文件)
python -m venv myvenv
cd myvenv # 进入虚拟环境安装django库等
.\Scripts\activate.bat
pip install Django
pip install django==2.0 # 指定版本
下载比较慢的同学可以换个源下载
pip install django==2.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
2.创建django项目和app应用程序
创建好项目,就可以用pytharm打开了
自己找个位置(运行时,还需要时虚拟环境哈)
python -m django startproject <projectname> (会在当前目录下创建项目)
django-admin startproject <projectname>
</projectname></projectname>
设置好pytharm使用到的 python环境。
3.运行命令
python manage.py runserver 默认8000端口 ( python .\manage.py runserver)
python manage.py runserver 0.0.0.0:8888 指定端口
或者创建应用,来看看环境成功没有
创建好项目侯,就可以用pycharm打开了
#在项目目录中
python manage.py startapp
或者:
python -m django startapp demo
这里运行时,可以能遇到问题:
1.Python 3.10中已经将collections.Iterable改为typing.Iterable,而Django 2.2和以前的版本中使用了collections.Iterator,因此无法兼容Python 3.11。
需要升级到Django 3.2以上的版本,因为Django 3.2中已经对Python 3.11进行了兼容性修复。
pip install –upgrade django
pip uninstall django
pip install django -i https://pypi.tuna.tsinghua.edu.cn/simple (下载3.2以上的)
注册应用
在公共目录setting中的INSTALLED_APPS添加 新增的
或者写成 polls.apps.PollsConfig (可以去复制,按住ctrl+C + shift + alt)
3.定义路由urls 和函数视图views
路径和视图函数举例
视图函数中,必须要返回HttpResponse对象,或子类的对象
如上图:
a应用内views.py中
from django.http import HttpResponse
def index(request): #用一个参数来接收,随便写,一般写成request
return HttpResponse("冲击40W")
b.外部urls中
导入方式有两种:
from demo应用名 import views
或者from demo.views import index 具体的
urlpatterns = [
path("admin/", admin.site.urls),
path('index/',views.index), #后面不用 加括号了
]
c.启动服务器,后可以查看效果
1.python manage.py runserver 9090 # 也可以不指定端口
2.访问http://127.0.0.1:9090/index/
注意:定义了url后,默认的欢迎页,就没有了
urls传递参数
urls.py中,views视图中。
这样就实现了,再访问路由的时候,把一些值传给了视图函数
urls.py中
path('jobs/',views.detail)
views中,视图函数要接收这个参数。 第二个参数名要何 url中定义的一样
def detail(request,job_id):
return HttpResponse(f"you are looking at question {job_id}")
4.统一应用的路由前缀
实现机制:
path中,第二个参数为 include(),就会去找子路由。
若一个项目中,有多个app应用,每个app应用都有自己的url,若写在一块,会比较臃肿
a.应用内要新建一个urls文件
b.外部的urls文件中使用include引用应用内的urls文件
应用内的urls.py也可以不导入了
效果如下
这个也可以看效果
4.前后端不分离的
定义路由+视图+html模板__常用模板语法
a.修改视图,使用render渲染html模板
第二个参数会自动识别 templates文件中的html文件
或者这么写
b.在应用内,新建一个文件 templates(django会识别这个文件), 里面添加一个html文件,访问看效果:
views 中
def index(request): #用一个参数来接收,随便写,一般写成request
# return HttpResponse("冲击40W")
sutdents =["小王","小李"]
return render(request,'molingli.html',{'students':sutdents})
templates文件下,molingli.html
{% if students %}
{% for student in students %}
{{ student }}
{% endfor %}
{% else %}
no polls are available
{% endif %}
模板引入css+js静态文件
1.在应用内放入静态资源 static, 保持如下格式就行,按格式添加一个test.css
2.html文件中载入静态文件的目录,要点:
{% load static %} 写在顶部
css文件载入(head头部中)识别哪个css文件
js文件的载入(body中尾部)识别哪个js文件
如下图
html中的标签如下
{% load static %}
Document
h1 {color: blue;text-align: center;}
添加发布会
这个【蓝色】是html中通过style标签写的CSS
这个【绿色】样式来自静态文件中的CSS文件
{# class为 test的 就是红色 #}
{{ students }}
{% for s in students %}
{{ s }}
{% endfor %}
test.css文件如下(.test 这些是CSS选择器,如.test表示 ,class 为test的就要符合此样式)
.red_clolor{
background-color: red;
}
h2 {
color: green;
text-align: center;
}
模板的继承
子模板中写法
使用{% extends “molingli.html” %} 继承 molingli,html 页面
5.数据库概念ORM操作
数据库迁移命令
一个类就是一个表,一个对象就是一条数据
创建好类后,用如下命令,把表同步到数据库。
生成迁移文件(此时还没操作数据库)如果确定是哪个应用的,就可以加应用名
python manage.py makemigrations [应用名称] # 如果命令不行后面加个应用名
同步数据库 (操作了数据库)
python manage.py migrate
setting中配置数据库如mysql
数据库配置在setting中,如下
代码:
新增一个mysql数据库
如果配置不写 test部门, 新建数据库默认要 utf8mb4 和 utf8_general_ci
*
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'polls', # 数据库名
'USER': 'root', # 用户名
'PASSWORD': 'qwe369', # 密码
'HOST': '127.0.0.1',
'PORT': '3306',
'TEST':{
'CHARSET': 'utf8',
'COLLATION': 'utf8_general_ci', }
}
}
修改后,需要安装第三方库 pip install pymysql,(django 3 不要用pymysql了?)
新版本的要装库: pip install mysqlclient
并且需要修改连接数据库的连接需要的库, 在 mysite(应用) \ 的 init.py中
import pymysql
pymysql.install_as_MySQLdb()
关系表举例
1.例子:老师表和班级表(一个老师只能在一个班级)(多余1关系)
这个时候setting中注册了应用就起作用了
from django.db import models
Create your models here.
class Grade(models.Model):
num= models.CharField(max_length=64,unique=True)
def __str__(self):
return self.num
class Teacher(models.Model):
name= models.CharField(max_length=64)
grade = models.ForeignKey(Grade,on_delete=models.CASCADE)
def __str__(self):
return self.name
使用菜单中tool中的东西 ctrl alt R 使用 python manage控制台
可以快速的使用命令
创建好后,这里就有表了
注意: 第一次 migrate时,不要加 应用名,需要吧基础的东西放过去
如:基础放过去了,才能 createuser
模型表注册到admin
admin.py中注册表,启动服务,就能在admin中查看数据库了
配置setting文件(admin语言等)
补充:默认看到的页面是英文的,可以配置,配置后变成中文
修改setting文件
方式1
LANGUAGE_CODE = "zh-hans" # 默认 "en-us"
LANGUAGE_CODE = "en-us"
TIME_ZONE = "Asia/Shanghai" # 默认 UTC
USE_TZ=False 是否使用UTC时间,不使用就是用本地时间
方式2:
应该在配置文件 settings.py
中 MIDDLEWARE
最后加入如下配置
加一排 ‘django.middleware.locale.LocaleMiddleware’, # admin界面语言本地化
创建用户命令
创建管理员:(创建后才能进入admin页面)
*
python manage.py createsuperuser
taoke
taoke@qq.com
123456
在admin页面中新增班级和老师
在添加老师时,就能发现一个老师只能选一个班级
多对多关系表举例
例子二:班级和学生(假设学生可以参加多个班级)多对多关系
则使用外键ManyToManyField
定义在逻辑发起方:学生参与班级,即学生表
同样,在admin注册
班级,老师,学生model类如下
class Grade(models.Model):
#班级如:1班、2班
num=models.CharField(max_length=64,unique=True)
def __str__(self):
return self.num
class Teacher(models.Model):
#姓名
name=models.CharField(max_length=64)
#老师所在班级
grade=models.ForeignKey(Grade,on_delete=models.CASCADE)
def __str__(self):
return self.name
class Student(models.Model):
#姓名
name=models.CharField(max_length=64)
#班级
grades=models.ManyToManyField(Grade,through='Student_grade_rel') #through写关系表的类名
#关系表,学生和它是多对1,班级和它也是多对1
class Student_grade_rel(models.Model):
#学生
sutent = models.ForeignKey(Student, on_delete=models.CASCADE)
grade = models.ForeignKey(Grade, on_delete=models.CASCADE)
# 新增字段---某学生在该班的排名
rank = models.IntegerField()
#命名关系表
class Meta:
db_table = 'sign_guest_events'
新增学生,可以看到学生表中,只有一个字段,另一个多对对关系的字段,是通过关系表关联的
补充:orm简单的操作和 url参数的传递
模型的继承
补充: 在项目中,可以创建 一个 叫common的应用,在里面存放一些公共的表的定义。
详见:OMR创建表_omr python_A~taoker的博客-CSDN博客
八、响应的整理:
第一种:HttpResponse
返回字符串的
from django.http import HttpResponse
可以把字典转化成json字符串,就可以用HttpResponse 返回了
其他参数:
- content_type 响应体格式
- status: 响应状态码 200的, 400 , 555(不存在的浏览器会显示不认识)
第二种:JsonResponse
from django.http import HttpResponse,JsonResponse return JsonResponse(project_data,json_dumps_params={‘ensure_ascii’:False})
它是基础 HttpRespose的
json_dumps_params 有中文,可以加这个参数
如果,不是字典,如果时字典套字典,就加一个safe=False ,
参数1:第一个需要是字典,或者是列表,如果是querySet列表对象,就需要用list转化一下
参数2:safe =False 如果是字典套字典,就加这个参数
参数3:json_dumps_params=False 有中文,可以加这个参数
第三种: render
from django.shortcuts import render
注:views中的 {students: students}
和html中的 students,写法要一样, 但实际的内容是 后面的值。
九:使用技巧
1. 命令使用帮助
python .\manage.py help 命令的帮助
python .\manage.py startapp -h 创建应用-h 查看具体的帮助
2.使用python manage.py 命令控制台:
可以不用输入 pythonmanage.py ,还能智能提示
专业版本pytcharm tools,还可以使用快捷键
3.快速启动
- pycharm 工具使用
ctrl+D,快速复制一行
复制路径: ctrl + c +shift + alt
知识点小结:
1.views.py视图函数中需要带一个参数,习惯把它些成了request
2.HttpResponse是django.http的一个东西,可以直接返回内容到浏览器上
3.render 可用来渲染html模板,并且可以给模板传值
4.html文件中的模板语法
- 使用变量 {{ }}
- for循环 {% for i in list %} —–{% endfor%}
- if判断 {% if 条件 %}———{% endif %}
- 列表元素个数: **list | lenth
- 载入静态文件 {% load static %}
- css文件载入(head头部中)
*
js文件的载入(body中)
- 父模板和子模板的插槽写法:{% block **** %} —插槽—{ % endblock %}
- 模板继承写法:{% extends “base.html” %}
5.多对1,多对对表关系的定义。
6.url中参数传递,orm操作,获取一个数据
Original: https://blog.csdn.net/Ataoker/article/details/121398857
Author: A~taoker
Title: django入门操作体验1
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/735176/
转载文章受原作者版权保护。转载请注明原作者出处!