ジャンゴ12ショッピングモールプロジェクト概要
1、理解のためのDjangoフレームワーク
1.1は、ブラウザはDjangoのURLを達するために要求を送信します。
1.2、アドレス割り当てのビュービューへのURLジャンプ。
1.3、およびviews.py表示データを通過しました。
1.3、MTVモデルを理解する
1.4、GETとPOSTを
2、ディレクトリ構造を説明しました
3、基本的なHTMLクラスだけでなく、継承の定義
4、家
ビュー機能は、主にデータベースから情報を読み取り、遠位端に伝達します。
このモデルは、4つの主要なデータテーブルを定義します。IMG、名前、trackidを持っているので、それらをメインクラスから継承させる
HTML
4.1、カルーセルのトップ達成
HTML
JS
5、市場
ビューの
HTML
5.1、GET要求によるデータ転送の前端
ルート:
注:这里用的 re_path()是django2的用法,django1直接用url()即可
見ます:
5.2、左のナビゲーションバーに達成するために
HTML
、CSS
/*左边的导航*/
aside {
width: 2.5rem;
float: left;
position: relative;
background: #fafafa;
overflow: auto;
height: 100%;
}
aside ul {
background: #fafafa;
}
aside ul li {
list-style: none;
text-align: center;
border-bottom: 0.04rem solid #e0e0e0;
line-height: 1.35rem;
width: 2.25rem;
position: relative;
z-index: +1;
}
aside ul li a {
display: block;
font-size: 0.35rem;
color: grey;
z-index: +1;
}
.yellowSlide {
background: yellow;
width: 0.1rem;
height: 0.7rem;
position: absolute;
left: 0;
top: 0.3rem;
display: block;
}
ビュー
5.3すべてのカテゴリー実現
ビュー
HTML
JS一部
a = "0";
// 点击事件的绑定
$(function () {
// 展示:全部类型,并收起:综合排序
the_slideDown("#all_types", "#all_cer", "#sort_rule", "#sort_cer");
// 收起:全部类型
the_slideUp("#all_types", "#all_cer",);
// 展示:综合排序,并收起:全部类型
the_slideDown("#sort_rule", "#sort_cer", "#all_types", "#all_cer");
// 收起:综合排序
the_slideUp("#sort_rule", "#sort_cer",);
})
// the_text:当前点击的文字 the_shade:当前阴影
// 展示
function the_slideDown(the_text, the_shade, other_text, other_shade) {
$(the_text).click(function () {
var $the_shade = $(the_shade);
// 先检查如果当前id已经被点击过了,就视为收起执行
if (a === the_text) {
$the_shade.slideUp();
the_chevron(the_text, "glyphicon-chevron-up", "glyphicon-chevron-down");
a = "0";
// 否则展示
} else {
// 显示阴影
$the_shade.slideDown();
the_chevron(the_text, "glyphicon-chevron-down", "glyphicon-chevron-up");
var $other_shade = $(other_shade);
$other_shade.slideUp();
the_chevron(other_text, "glyphicon-chevron-up", "glyphicon-chevron-down");
// 记录当前id已经被点击
a = the_text;
}
})
}
// 收起
function the_slideUp(the_text, the_shade) {
$(the_shade).click(function () {
// 点击阴影,收回阴影
var $the_shade = $(the_shade);
$the_shade.slideUp();
the_chevron(the_text, "glyphicon-chevron-up", "glyphicon-chevron-down");
// 清除点击记录
a = "0"
})
}
// 改变V形符号,向上向下
function the_chevron(the_text, the_rem, the_add) {
var $the_text = $(the_text);
var $span = $the_text.find("span").find("span");
$span.removeClass(the_rem).addClass(the_add);
}
5.4、実現の包括的なソート
ビュー:受信遠位のすべてのタイプ
のビュー:対応するソートクエリでクエリの実行中にデータを取得するために
HTML
(同じJS 5.3)
6、鉱山
6.1、ログインログイン
見ます:
- GET:直接进入login.html
- POST:提交后,判断用户激活情况、密码正确性、存在情况,并把错误信息传入服务器session,再传回前端
6.1.1、session传递错信息
视图:
通过 error_msg = request.session.get('error_msg')
获取错误信息
通过 request.session['error_msg'] = '错误信息'
存入错误信息
当程序需要为某个客户端的请求创建一个session时,
服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),
如果已包含则说明以前已经为此客户端创建过session,
服务器就按照session id把这个session检索出来使用(检索不到,会新建一个)
6.2、用户登录状态检查
视图–>mine函数:
获取请求过来的session,如果存在user_id返回True到html
6.3、退出用户登录状态
**视图:**清空当前id的session内容
mine.html
6.4、注册register
视图:
- GET:直接进入register.html
- POST:用户名、密码、邮箱等信息传入,之后进入login.html
6.5、密码在前端传入前加密(js/md5),防止在传入服务器前被别人截获看见密码
html:在信息提交前return check(),js执行后为True才会提交
js:把密码进行md5加密后,再传递
(先获取id为password_input的标签的值,再将其改为MD5加密后的数值)
登录时不用解密,直接将用户输入的明文进行MD5加密,然后再传入服务器
6.6、密码在入数据库前加密,防止密码明文储存
视图:
- 加密
password = make_password(password)
(写在register函数里) - 解密
check_password(password, user.u_password)
如果返回True,密码正确(写在login函数里)
6.7、邮箱激活
6.7.1、激活码的生成、储存(redis缓存)、传递
アプリケーション/ views_heiper.py:連結することにより生成された接続の活性化
表示- >関数を登録: UUIDによって、その後のユニークなコードを生成するためにハッシュされ、プレゼンスサーバを経由してredis.cacheキャッシュと一日のために有効に設定