1.查看Django版本:python-mdjango--version
2.创建Django项目:django-adminstartprojectmysite(cd到你要创建的文件下)
3.切换到Django项目目录下,启动Django:pythonmanage.pyrunserver
(2)pycharm下
1.NewProject:创建新的Django项目(建议在moresetting中,可设置应用applicationname)
二、设置settings.py文件:
(1)修改TEMPLATES中的'DIRS':
1os.path.join(BASE_DIR,'templates')
(2)如果想打印orm转换过程中的sql,需要在settings中进行如下配置:
1LOGGING={2'version':1,3'disable_existing_loggers':False,4'handlers':{5'console':{6'level':'DEBUG',7'class':'logging.StreamHandler',8},9},10'loggers':{11'django.db.backends':{12'handlers':['console'],13'propagate':True,14'level':'DEBUG',15},16}17}(3)把settings自带的DATABASES替换成自己的:
DATABASES={'default':{'ENGINE':'django.db.backends.mysql',#改成所用的数据库'NAME':'library',#要连接的数据库,连接前在账号下需要创建好数据库'USER':'root2',#连接数据库的用户名'PASSWORD':'123',#连接数据库的密码'HOST':'127.0.0.1',#连接主机默认本机'POST':3306#端口默认3306}}(4)如果INSTALLED_APPS里没有应用的名称,需要手动添加“applicationname”
(5)管理不同应用的css/js等静态文件:在一个应用里创建static文件夹,用于管理文件
settings.py:添加代码
STATICFILES_DIRS=[os.path.join(BASE_DIR,"static"),]
三、为应用配置models.py
(1)models.py用于创建表结构:之后表的增删改查全部由该类的对象进行操作
1fromdjango.dbimportmodels#必须导入23#Createyourmodelshere.45classBook(models.Model):#类一定要继承models.Model6id=models.AutoField(primary_key=True)#AutoField:自增;primary_key:主键7title=models.CharField(max_length=32)#CharField:字符串8pub_date=models.DateField()9price=models.DecimalField(max_digits=8,decimal_places=2)#类似于double,精读高的浮点数,max_digits最大位数(包括decimal小数部分),decimal小数部分10publish=models.CharField(max_length=32)1112#打印对象,默认打印一长串object属性13#__str__当对象生成的时候自动触发14def__str__(self):15returnself.title#打印对象的QuerySet类型(2)一定要在项目全局文件中的__init__中设置:
1importpymysql23pymysql.install_as_MySQLdb()
(3)创建完之后一定要运行:进行python语句和sql语句的转换
1两条数据库迁移命令即可在指定的数据库中创建表:2pythonmanage.pymakemigrations3pythonmanage.pymigrate四、urls里配置路由
(1)导入创建应用的views
1fromdjango.urlsimportpath,re_path2fromapp01importviews(2)配置路由
urlpatterns=[path('admin/',admin.site.urls),path('book/',views.book),path('addbook/',views.addbook),re_path('^$',views.book),re_path(r"book/(\d+)/delete",views.delbook),#(\d+)捕获数字delbook(request,数字)re_path(r"book/(\d+)/change",views.changebook)#(\d+)捕获数字delbook(request,数字)](3)如果有多个应用,则应该使用分发:让每一个应用有单独自己的url路径
第一步:为每一个应用创建一个urls.py进行分流
第二步:在全局urls中进行分发:
1#分发:2#让每一个应用有单独自己的url路径3re_path(r"app01/",include(("app01.urls","app01"))),#include(('',''))创建两个房间,第二个参数:namespace用来区别同样的urls4re_path(r"app02/",include(("app02.urls","app02"))),56#去掉app01/的分发:7re_path(r"^",include("app01.urls")),89path("articles/
五、创建对应的视图函数
(1)导入必要的模块
fromdjango.shortcutsimportrender,HttpResponse,redirect(2)视图函数都需要有返回值return,通常返回值有三种
1returnrender(request,'changebook.html',{"book_obj":book_obj})#给html传入值需要遵循格式:{"book_obj":变量}2returnHttpResponse("HelloWorld")3returnredirect("/book")#进行重定向,不再需要在form表单action里进行定义(3)获取input标签里的值(input标签里一定要定义name="",才能从请求中根据name找到对应的value):
1ifrequest.method=='POST':#判断请求方式2title=request.POST.get("title")3price=request.POST.get("price")4pub_date=request.POST.get("pub_date")5publish=request.POST.get("publish")67#添加表数据,需要导入表对象Book8book_obj=Book.objects.create(title=title,price=price,pub_date=pub_date,publish=publish)(4)表对象的各种obj.object.操作:
首先导入需要用到的表:
fromapp01.modelsimportBook从表中拿到input收集到的各种value
book_list=Book.objects.all()#[obj1,obj2....]通过render传入变量
returnrender(request,'book.html',locals())#local()传入该函数局部变量(5)模板语法
html页面for循环添加table-tbody元素(元素由render传入的变量提供)
re_path(r"book/(\d+)/delete",views.delbook),#(\d+)捕获数字delbook(request,数字)通过模板语法进行删除;再返回该页面(redirect)
1defdelbook(request,id):23Book.objects.filter(id=id).delete()#删除book.pk对应的ID的数据45#删除后进行重定向需要导入redirect6returnredirect("/book")修改数据:与删除一样拿到数据唯一的ID,进行修改
1defchangebook(request,id):2#a标签进入的页面默认为get3#不管是什么请求进入的changebook都获取book_obj4book_obj=Book.objects.filter(id=id).first()#first()拿到queryset的第一个对象56ifrequest.method=="POST":7title=request.POST.get("title")8price=request.POST.get("price")9pub_date=request.POST.get("pub_date")10publish=request.POST.get("publish")1112#当进入编辑页面后点击提交,进入post,对数据进行修改13book_obj=Book.objects.filter(id=id).update(title=title,price=price,pub_date=pub_date,publish=publish)1415returnredirect("/book")161718returnrender(request,'changebook.html',{"book_obj":book_obj})
总结:
1.要在html文件里根据数据库生成标签需熟练运用模板语法for:
4.有按钮的地方就有post访问,则视图函数中通常会进行ifrequest.method对请求进行判断,让网页return到不同的页面