django项目的简单实现分析
配置静态文件
简介
什么是静态文件?
django项目中引入的第三方的包,js,css,自己写的js,css,保存的图片等相关数据
为什么要配置静态文件?
浏览器通过html页面拿到我们导入的第三方库的路径,发起请求,django是只针对打开接口的资源(url控制的),能被请求,我们的静态文件默认没有被打开请求,配置静态文件就是给外部打开能访问内部资源的文件夹,让外部直接访问。
配置
1 默认所有的静态文件放在static文件夹下
把所有的上述文件放在这个文件夹
2 要在setting中配置
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'), # 里边可以放多个文件夹
]
注意:
""" 1 static文件夹是大家统一默认的放静态文件的文件夹名字,在setting中配置后里边所有的资源对外部开放,能被直接请求 2 setting中的 STATIC_URL = '/static/' 设置,设置的是html文件中设置的外部请求第三方包的路径前缀,与1的文件夹名字无关 3 setting中的STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'],"static"表示的你静态文件的文件夹
4 STATICFILES_DIRS中可以放多个静态文件夹
"""
路由控制
在django的urls.py文件中
from django.contrib import admin from django.conf.urls import url from app01.views import * # 导入应用中的视图函数 urlpatterns = [ url('admin/', admin.site.urls), # django后台管理自带的 url('test/', get_test), # 自己去写的 ]
注意:
1 urlpatterns是一个列表可以放多个值
2 url是一个函数,第一个参数是正则表达式,第二个参数是views.py里映射的视图函数
3 浏览器求情url路径最后没加"/"时,会重定向到"/"的url再次发请求,所以请求时可以不加"/"
视图函数
写在应用的views.py文件中
三板斧:render,HttpResponse,redirect
from django.shortcuts import render, HttpResponse, redirect
def get_test(requests):
if requests.method == "GET":
print(requests.GET)
name = requests.GET.get("name")
name1 = requests.GET.getlist("name")
print(name, name1)
return HttpResponse("GET")
elif requests.method == "POST":
name2 = requests.GET.get("name")
name3 = requests.GET.getlist("name")
print(name2, name3)
return HttpResponse("POST")
return HttpResponse("错误请求")
"""
1 requests.method # 获得前端请求的请求方法,GET或POST
2 requests.GET可以获取前端get请求的数据<QueryDict: {'name': ['lynn', 'egon']}>
3 可以通过字典取值方法,获取requests.GET中的数据,默认的是value列表的最后一个值
4 如果想获取所有的value列表,用requests.GEt.getlist("name")方法,会得到一个列表
5 POST请求和get一样
"""
注意:
post提交数据时,浏览器会抛异常:
先注释掉setting中的:
数据库
基于pymysql
views.py
from django.shortcuts import render, HttpResponse, redirect
import pymysql
def get_user_info(requests):
if requests.method == "GET":
return render(requests, "login.html")
elif requests.method == "POST":
conn = pymysql.connect(
host="132.232.98.201",
port=3306,
database="django_table",
user="root",
password="boonray",
charset="utf8",
autocommit=True
)# 连接数据库
name = requests.POST.get("name")
password = requests.POST.get("password")
cursor = conn.cursor(pymysql.cursors.DictCursor)
cursor.execute("select * from django_user where name=%s and password=%s", (name, password)) # 执行sql语句
user_info = cursor.fetchall() # 得到执行结果
if user_info: # 验证数据是否存在
return HttpResponse("登录成功")
return HttpResponse("错误请求")
基于orm
django连接数据库
setting中配置
DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3', # 默认的是一个小的数据库sqlite3
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
"default": {
'ENGINE': 'django.db.backends.mysql',
'NAME': "django_table",
"USER": 'root',
"PASSWORD": '123',
"HOST": "127.0.0.1",
"PORT": 3306,
}
}
# 注意: 字典的key全部是大写
在项目或者应用文件包下的__init__文件中配置
import pymysql
pymysql.install_as_MySQLdb() # 用pymysql代替mysql_db连接数据库
orm
对象关系映射,实现对数据表数据的简单的增删改查
1 类映射数据库中的表
2 属性映射到数据库中的字段
3 对象映射到数据库中的一条数据
models.py文件
增
models.py文件
from django.db import models
# Create your models here.
# 用户表
class DjangoUser(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=32)
password = models.CharField(max_length=32)
class Meta:
db_table = "django_user"
def __str__(self): # 打印对象是,打印结果为name字段值
return self.name
views.py
from django.shortcuts import render, HttpResponse, redirect from app01.models import * def get_user_info(requests): if requests.method == "POST": name = requests.POST.get("name") password = requests.POST.get("name") user_obj = DjangoUser.objects.create(name=name, password=password) # 保存数据到数据库,会把新创建的数据对象返回 # user = DjangoUser(name=name, password=password) # 第二种方式保存 # user.save() # 调用save方法,保存到数据库,没有返回值 if user_obj: return HttpResponse("注册成功") else: return HttpResponse("注册失败") return render(requests, "login.html")
删
views.py
def delete_user(requests):
delete_id = requests.GET.get("delete_id")
DjangoUser.objects.filter(id=delete_id).delete() # 固定用法,表.objects....filter()相当于sql的where,筛选
return HttpResponse("删除成功")
查
views.py
def get_user(requests):
# user_list = DjangoUser.objects.all() # 查询数据库表中所有的数据,返回的是QuerySet对象可以索引取值
# user_list = DjangoUser.objects.filter() # filter中加筛选条件,返回的是QuerySet对象
# print(user.query) # 对象可以执行query方法,结果是得到这个对象的sql语句
user = DjangoUser.objects.filter().first() # 结果是数据对象
return render(requests, "login.html", locals()) # 第三个参数必须是字典,locals是当前所有能获取的变量生成一个字典
改
views.py
def update_user(requests): update_id = requests.POST.get("update_id") name = requests.POST.get("name") password = requests.POST.get("password") user_id = DjangoUser.objects.filter(id=update_id).update(name=name, password=password) if user_id: # 返回结果是修改数据的id return HttpResponse("修改成功")