一、路由系统
1.如何实现伪静态
在cnblogs中:https://www.cnblogs.com/wangwei5979/p/11160708.html
而我们自己写的:
http://127.0.0.1:8000/up_studnet/?id=12同样是网页 为何cnblogs这样设计
原因:
1就是因为比较美观
2由于使用搜索引擎来搜索我们所需要的内容使,第一种的方式更容易被各个搜索引擎所收录,被搜索
到的概率就高,我们自己写的会被搜索引擎认知为动态网页,而第一个方式就是伪静态。例题:
http://127.0.0.1:8000/up_studnet/?id=12http://127.0.0.1:8000/up_studnet/12/
如何实现:在urls.py里,在url中添加这样的正则匹配,
[url(r'^index/(\w+)/(\w+)/', index),
url(r'^test/(?P<id>\w+)/(?P<name>\w+)/', test),]def test(request, name, id):
print(id , name)return HttpResponse('test')此时就不需要用?id=某个值来进行传值,避免了使用?来操作
2.路由正则与反向路由
在url里
url(r'^test2/', test2)
在html中会匹配以test2/开头的所有接下来的网页可以url(r'^test2/$', test2)
只能匹配/test2/的网页了还可以自己定义404:
url(r'^', notfound) 需要写到最下面在定义了这个统配之后,所有在url没有的 都会走这个自定义的404了反向路由:
后台url:
url(r'^logindjsajdbjsabdsabdbsabdhsabdhbsahbdsaasa/$', login, name='xxx')前台:
<form action="{% url 'xxx' %}"><input type="text">
</form>
3.路由分组
有许多相同的方法可以写在一个py文件里,django也有这个方法,可以通过创建app来完成,
在创建django时只可以带着创建一个app文件。
django创建app:
python3 manage.py startapp 自定义app名称路由分组总urls.py;
url(r'^app02/', include('app02.urls')),
url(r'^app03/', include('app03.urls')),分app下的 urls.py:
from app03 import viewsurlpatterns = [url(r'^students/', views.studnets)]
然后在app下的views.py里写方法
二、函数视图
FBV:
function based viewCBV:
class based viewurls.py:
url(r'^login/', views.Login.as_view()),views.py:
from django.views import Viewclass Login(View):def get(self, request):return render(request, "login.html")def post(self, request):
uname = request.POST.get('username')print(uname)
return HttpResponse('ok')原理:
'get': 请求数据
'post':提交数据
'delete': 删除数据
'put': 更新数据
'patch': 更新部分数据ps:
form表单提交 只支持get、post ajax支持核心:def dispatch(self, request, *args, **kwargs):super(Login, self).dispatch(request, *args, **kwargs)
可以创建dispatch方法来做数据的限制
三、Django的ORM
Django的ORM,跟sqlalchemy一样都是操作mysql数据库的。
在Django的ORM中,
orm配置:
a.创建数据库
create database 数据库名b.配置mysql数据库的链接:
DATABASES = {# 'default': {# 'ENGINE': 'django.db.backends.sqlite3',# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),# }'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'xxx', ## 数据库名称'USER': 'xxx',## 数据库用户名称'PASSWORD': 'xxx', ## 安装 mysql 数
据库时,输入的xxx 用户的密码'HOST': '127.0.0.1',}}c. 注册app:
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','app02','app03']
d. 需要将mysqldb换成pymysql
python3:pymysqlpython2:MySQLdb在总的的 __init__.py文件里
import pymysql
pymysql.install_as_MySQLdb()e:创建表 命令:在app文件的models里,可以创建如下表:
class Classes(models.Model):cid=models.AutoField(primary_key=True)cname = models.CharField(max_length=32, null=True)然后再Terminal里python manage.py makemigrationspython manage.py migrate