保证django能正常运行的几个注意事项
1.保证你的计算机名不能是中文 2.一个pycharm窗口就对应一个项目(工程) 3.文件路径命名尽量不要用中文 4.启动django确保端口不能重复 5.新创建的app必须在settings配置文件中注册才能生效
静态文件配置
#1、STATIC_URL = ‘/static/\' 看是否已经存在,不存在添加上,一般都存在 #2、创建一个static文件夹 (放图片、css等静态相关)
3、STATICFILES_DIRS=[ os.path.join(BASE_DIR,\'static\') 创建文件夹路径,可以写多个
自定义登陆功能
def login(request): if request.method == \'GET\': return render(request,\'login.html\',locals()) elif request.method =="POST": #print(request.POST) # print(request.POST.get(\'name\')) 后台输出: <QueryDict: {\'name\': [\'11\'], \'pwd\': [\'11\']}> 11 这里print(request.POST)value是一个列表 而 print(request.POST.get(\'name\'))取列表中最后一个 #如何获取列表 #request.POST.getlist(\'name\')
django命令行创建项目
#django-admin startproject \'项目名\' #创建app #python manage.py startapp \'应用名\' #启动django #python manage.py runserver
---django链接mysql---
1.settings配置文件database
DATABASES = { \'default\': { \'ENGINE\': \'django.db.backends.mysql\', \'NAME\': \'lqz\', \'USER\': \'root\', \'PASSWORD\': \'123456\', \'HOST\': \'127.0.0.1\', \'PORT\': 3306, \'ATOMIC_REQUEST\': True, \'OPTIONS\': { "init_command": "SET storage_engine=MyISAM", } } } \'\'\' \'NAME\':要连接的数据库,连接前需要创建好 \'USER\':连接数据库的用户名 \'PASSWORD\':连接数据库的密码 \'HOST\':连接主机,默认本机 \'PORT\':端口 默认3306 \'ATOMIC_REQUEST\': True, 设置为True统一个http请求对应的所有sql都放在一个事务中执行(要么所有都成功,要么所有都失败)。 是全局性的配置, 如果要对某个http请求放水(然后自定义事务),可以用non_atomic_requests修饰器 \'OPTIONS\': { "init_command": "SET storage_engine=MyISAM", } 设置创建表的存储引擎为MyISAM,INNODB
2.在app下的__init__文件均可,告诉django用pymysql链接数据库而不再使用默认的mysqldb
import pymysql pymysql.install_as_MySQLdb()
---ORM(对象关系映射)---
注意!!django-orm不能创建数据库(需要手动创建) ,只能创建表和字段
数据库迁移命令
python manage.py makemigrations 把你的更改记录记录到小本本python manage.py migrate 将你的改动操作同步到数据库
或tools---->Run manage.pk后敲
makemigrations
migrate
#只要动了models.py中类与表相关的东西,就必须得重新执行上面的两条命令
模型表增加字段
#注意:给一个已经有数据的表中添加新字段,需要设置默认值 id = models.AutoField(peimary_key=True) name = models.CharFiled(max_length=64,default=\'pdun\')
修改数据
#直接修改类中的字段,然后执行数据库迁移命令
模型表数据的增删改查
查:
在views中导入models #注意!! #如果是 from app01.models import * #直接User.objects.all() #1、models.User.objects.all() # 查询到User表中所有的数据,执行结果是一个queryset对象 只要是queryset对象就可以点.query查看当前查询出来的queryset对象内部的sql语句 #2、models.User.objects.get() # get拿出来的是数据对象本身,如果查询不存在直接报错 #3、models.User.objects.filter() # filter拿出来是queryset对象,如果查询不存在不报错只返回空
# 注意 用filter查询出来不是数据对象本身 相当于[数据对象1,数据对象2,数据对象3] # 获取数据对象本身 models.User.objects.filter().first() >>> models.User.objects.filter()[0] # queryset虽然支持索引取值,但是索引不能为负数
from django.shortcuts import render,redirect # from app01.models import * from app01 import models # Create your views here. def userlist(request): if request.method == \'GET\': ret = models.User.objects.all() #拿到所有数据传给HTML return render(request, \'userlist.html\', {\'user_list\': ret}) ------------------------------------------------------------------- <table border="1"> <thead> <tr> <th>id</th> <th>name</th> <th>password</th> <th>addr</th> <th>编辑</th> #添加新字段 </tr> </thead> <tbody> {% for user in user_list %} <tr> <td>{{ user.id }}</td> <td>{{ user.name }}</td> <td>{{ user.password }}</td> <td>{{ user.address }}</td> <td><a href="">删除</a></td> #每行后添加删除按钮 </tr> {% endfor %} </tbody>
数据增删改查
6 user的增删改查 ***重点****: 1 单表查询所有用户:models.User.objects.all() 得到的是 queryset对象(当成列表),列表里面,一个一个的对象[user1,user2] 2 render(request, \'userlist.html\', {\'user_list\': ret}) 3 模板里: {% for user in user_list %} #要循环的内容 {{user.name}} {% endfor%} 4 get请求携带参数: http://127.0.0.1:8000/deleteuser/?id=1 后台取值:request.GET.get(\'id\') request.GET[\'id\'] 5 orm删除记录 models.User.objects.filter(id=id).delete() 返回值:影响的行数 6 前台post提交的数据取值:name=request.POST.get(\'name\') 7 orm保存: 两种方式: 1 user=models.User.objects.create(name=name,password=pwd,address=addr) 2 user=models.User(name=name,password=pwd,address=addr) user.save() 8 orm查询单条数据:user=models.User.objects.filter(id=id).first() 9 orm的修改 models.User.objects.filter(id=id).update(name=name,password=pwd,address=addr)
from django.shortcuts import render,redirect from app01 import models # Create your views here. def userlist(request): if request.method == \'GET\': ret = models.User.objects.all() return render(request, \'userlist.html\', {\'user_list\': ret}) def deleteuser(request): if request.method == \'GET\': id = request.GET.get(\'id\') ret = models.User.objects.filter(id=id).delete() print(ret) return redirect(\'/userlist/\') def adduser(request): if request.method==\'GET\': return render(request,\'adduser.html\') elif request.method==\'POST\': name=request.POST.get(\'name\') pwd=request.POST.get(\'password\') addr=request.POST.get(\'addr\') # 方式一 user=models.User.objects.create(name=name,password=pwd,address=addr) # 方式二 user=models.User(name=name,password=pwd,address=addr) user.save() print(user.name) print(type(user)) return redirect(\'/userlist/\') def updateuser(request): if request.method==\'GET\': id=request.GET.get(\'id\') user=models.User.objects.filter(id=id).first() return render(request,\'updateuser.html\',{\'user\':user}) if request.method==\'POST\': id=request.POST.get(\'id\') # id2=request.GET.get(\'id\') # print(id) # print(id2) name=request.POST.get(\'name\') pwd=request.POST.get(\'password\') addr=request.POST.get(\'addr\') models.User.objects.filter(id=id).update(name=name,password=pwd,address=addr) return redirect(\'/userlist/\')
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <table border="1"> <thead> <tr> <th>id</th> <th>name</th> <th>password</th> <th>addr</th> <th>删除</th> <th>编辑</th> </tr> </thead> <tbody> {% for user in user_list %} <tr> <td>{{ user.id }}</td> <td>{{ user.name }}</td> <td>{{ user.password }}</td> <td>{{ user.address }}</td> <td><a href="/deleteuser?id={{ user.id }}">删除</a></td> <td><a href="/updateuser?id={{ user.id }}">编辑</a></td> </tr> {% endfor %} </tbody> <a href="/adduser/">新增用户</a> </table> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> #后端获取id有两种方法,一种action后边的参数,一种用hidden隐藏一个id <form action="/updateuser/?id={{ user.id }}" method="post"> <p><input type="hidden" name="id" value="{{ user.id }}"></p> <p>用户名: <input type="text" name="name" value="{{ user.name }}"></p> <p>密码: <input type="text" name="password" value="{{ user.password }}"></p> <p>地址: <input type="text" name="addr" value="{{ user.address }}"></p> <input type="submit" value="提交"> </form> </body> </html>
from app01 import views urlpatterns = [ url(r\'^admin/\', admin.site.urls), url(r\'^userlist/\', views.userlist), url(r\'^deleteuser/\', views.deleteuser), url(r\'^adduser/\', views.adduser), url(r\'^updateuser/\', views.updateuser), ]